web-dev-qa-db-ja.com

httpdのLogrotate構成(CentOS)

CentOS5.5でApache2.2.3を実行していますが、/ etc/logrotate.d/httpdに次のlogrotatepostrotate構成があることに気付きました。

postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript

これは週に1回実行するように設定されているため、Apacheのハードリロードが実行され、すべての接続が切断されるようです(これは正しいですか?私は専門家ではありません)。代わりに、回転後のスクリプトを正常な再起動に変更する方が安全でしょうか?

/usr/sbin/apachectl graceful > /dev/null

これは、仮想ホストに対してすでに行っている回転後の動作です。 httpdrotateスクリプトがハードリロードを行う必要がある理由がわかりません。

これを適切に構成する方法についてのアドバイスは大歓迎です。

ありがとう、ラルフ

2
Ralph

いいえ、「/ sbin/service httpd reload」コマンドは「ハードリスタート」を開始しないため、すべての接続を強制終了するわけではありません。 CentOSはサービスを介してApacheをトリガーし、他のOSはinitスクリプトを介してトリガーします。それらすべてにとって、「リロード」は、ApacheにUSR1信号を正常に再起動/送信することを意味します。

「USR1またはグレースフルシグナルにより、親プロセスは、現在の要求の後に終了するように(または、何も提供していない場合はすぐに終了するように)子にアドバイスします。親は、構成ファイルを再度読み取り、ログファイルを再度開きます。それぞれの子が死ぬと、親はそれを新世代の構成の子に置き換え、新しいリクエストの処理をすぐに開始します。」

0
desasteralex

元の答えは正しくありません。 initscript "reload"は、reloadコマンドをapachectlに渡すだけです。リロードによりSIGHUPがhttpdに送信され、子プロセスが即座に終了し、does現在接続されているクライアントが中断されます: http://httpd.Apache.org/docs/current/stopping.html#hup

RHEL httpdパッケージに対して提出されたバグを参照してください: https://bugzilla.redhat.com/show_bug.cgi?id=480624

Logrotateスクリプトでgracefulが使用されない理由は、子プロセスが停止したことを保証する方法がないためです。 http://httpd.Apache.org/docs/current/stopping.html#graceful

3
idleyoungman