Apacheのログローテート

007.jpg
Apacheのログローテーションは昔からnewsyslogに任せていた。
最近の?Apacheではログローテーション用のモジュールが付属しているらしい。
まあどんなプログラムを使っても良いわけだけれど、newsyslogじゃダメなのかな。

サーバ再構築の際にもnewsyslog.confにログローテーションの設定をした。
が、ある時/var/log/httpd-access.logを見てみたら何も書かれていない。
ん?何が起きたんだ?
そこでapachectl restartとしてhttpdをリスタートしたら正常にログが作られ始めた。

あ、えーと、以前に何か設定したような覚えが…
で、調べてみるとログローテートの時にシグナル(HUP)を送らなくてはいけないんだった。
これは、ログファイルはファイル名で管理されているのではなくinodeで管理されているからだとか。
ファイル名はあくまでも人間用のものであり、Apacheはiノードで管理している。
従ってログローテーションが起こると、ファイル名とinodeのミスマッチが起きてしまう。
(プログラムは新たな(書き込むべき)ファイルを認識していない)
そこでHUPを送って新たなファイルを認識させる。

と言うことでnewsyslog.confには以下の記述をした。
/var/log/httpd-access.log    644 20 * $D J /var/run/httpd.pid 1
/var/log/httpd-error.log    644 20 * $D J /var/run/httpd.pid 1
/var/log/httpd-ssl_request.log 644 20 * $D J /var/run/httpd.pid 1

dovecotも同様にHUP(Signal 1)を送る。
/var/log/dovecot.log      640 7 * @T00 JC /var/run/dovecot/master.pid 1

httpd各ログは同じ時間にローテートさせているのでいずれにもHUPを書いたけれど、1つではダメかなと思ったり。

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

この記事へのコメント