目前我正在使用我们的 IMAP 服务器,我需要实现某种方式来“优雅地”重新启动服务器。我们使用boost::asio
(但不是必需的)。我需要保持当前操作为已经运行操作(例如 Fetch)的客户端工作,但是新的服务器实例(我们正在部署的新版本)应该拦截 143 和 993 端口并开始接受客户端以避免停机。目前我有2个想法:
侦听命令的 unix 域套接字。可扩展,但更难实现,因为需要“控制套接字”、转换到新服务器等等。
信号(例如 USR1)。
fork()
服务器进行一些清理,释放侦听端口,然后exec()
进入将继续接受的新实例,而旧实例对已连接的客户端进行清理关闭。...还有其他想法吗?