ふとhttpd のerror_log を確認すると
[Sun May 24 03:58:56 2015] [notice] SIGHUP received. Attempting to restart
と出ている。なんだこれは?
ちょうどcron.daily が logrotate 実行している時、要するにログファイルが切り替わったタイミングの最後にこの記述があった。
notice なので大したことないんだろうけど気になる。Apache がなぜか 再起動 しているのも気持ち悪し。
調べてみた...。
タイミング的に logrotate が怪しいので、どういう設定になっているか確認した。
# vi /etc/logrotate.d/httpd
で設定を確認してみると。以下のような記述になっていた。
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
あー、postrotate ~ endscript の間でたしかに、httpd reload ってしてます。
logrotate がそういう設定になっていたので、いうなれば正常動作なんですが、一瞬でもApacheが再起動したら、ユーザー側がなにかダウンロードしていたら途切れてしまうことになるので、これはやめてほしい。
なので、以下のようにpostrotate ~ endscript の間をコメントアウトして、ハイライト部分を追加修正した。
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress weekly rotate 4 copytruncate # postrotate # /sbin/service httpd reload > /dev/null 2>/dev/null || true # endscript }
ちなみに追加したlogrotate オプションの意味は以下のとおり
weekly - 週単位でログを置き換える。毎日はdaily、毎月はmonthly
rotate 4 - ログを何世代残すかの設定 これは4世代残すという意味。
copytruncate - Apacheを再起動しなくてもログをローテーションさせる方法。だがロストが生じる可能性という欠点があるらしい...。