0

目前我正在使用我们的 IMAP 服务器,我需要实现某种方式来“优雅地”重新启动服务器。我们使用boost::asio(但不是必需的)。我需要保持当前操作为已经运行操作(例如 Fetch)的客户端工作,但是新的服务器实例(我们正在部署的新版本)应该拦截 143 和 993 端口并开始接受客户端以避免停机。目前我有2个想法:

  1. 侦听命令的 unix 域套接字。可扩展,但更难实现,因为需要“控制套接字”、转换到新服务器等等。

  2. 信号(例如 USR1)。fork()服务器进行一些清理,释放侦听端口,然后exec()进入将继续接受的新实例,而旧实例对已连接的客户端进行清理关闭。

  3. ...还有其他想法吗?

4

1 回答 1

2

UNIX 守护程序的一个常见约定是进行软重启以响应SIGHUP. 确切的含义因程序而异。通常这意味着关闭并重新打开日志文件或重新读取它们的配置文件。一个常见的用途是协助日志文件轮换。

为什么SIGHUP?的正常目的SIGHUP是在用户注销时向用户的进程发出信号。根据定义,守护进程已经将自己从用户的会话和 TTY 中分离出来,以避免在启动用户注销时被杀死。所以SIGHUP被重新定义为“软重启”。

底线:执行 #2 但使用SIGHUP.

于 2013-07-05T21:52:25.123 回答