httpd ログローテーション

あるお客様のサーバで httpd のログローテーションに失敗していました 😥

logrotate が access_log を olddir/access_log.1 に move してくれる
のですが、httpd が olddir/access_log.1 にログを書き込み続けてしまう
現象です。
本来は新しく作成された access_log にログを書きこんで欲しいのです。

調べたところ、同じ httpd に対する logrotate の設定ファイルが 3 つありました。

/etc/logrotate.d/httpd
/etc/logrotate.d/httpd1
/etc/logrotate.d/httpd2

それぞれ postrotate で SIGHUP を httpd に送っているのですが、
httpd1, httpd2 の SIGHUP を httpd が受信していないのが原因っぽいです。

多分 3 つのローテーションが一瞬で行われるので、一瞬の間に
3 回 SIGHUP が httpd に対して送られます。
しかし、httpd は立て続けにシグナルを受信できないようで、
最初の SIGHUP を受信後、httpd1, httpd2 の
SIGHUP は無視されているっぽいです。

実際に以下のようにやって httpd のログを見てみると最初の
シグナルしか受信していないのがわかります。

kill -HUP httpd_pid; kill -HUP httpd_pid; kill -HUP httpd_pid

そして、間に sleep 1 をいれて試してみたところ 3 回シグナルを受信しました。

そんな訳で、postrotate に sleep 1 を入れて様子見中です。。。 :mrgreen: