0

現在、私は IMAP サーバーに取り組んでおり、サーバーを「正常に」再起動する方法を実装する必要があります。使用してboost::asioいます(ただし、必須ではありません)。既に操作 (フェッチなど) を実行しているクライアントに対して現在の操作を継続する必要がありますが、新しいサーバー インスタンス (展開している新しいバージョン) は 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 に答える