ログがローテートされてない!

別件で apache のログファイルを調査してたら、やたらファイルサイズが大きいことに気がつく。
よくみると2日ほどローテートされていないようだ。
/etc/logrotate.conf や /etc/logrotate.d/httpd を調べても特に問題ない。

なぜ??
と思ったら /var/log/messages にこんなエラーが。。。

logrotate: ALERT exited abnormally with [1]

やっぱり logrotate が異常終了している様子。
logrotate を調べると、デバッグモード(-d)なるものがあり、実際にファイルをいぢらない(ローテートしない)でlogrotate の動きをチェックできるらしい。
早速、

# /usr/sbin/logrorate -d /etc/logrotate.conf

で実行してみると

error: error accessing /var/***/log: No such file or directory
error: hogehoge:1 glob failed for /var/***/log/*.log

というエラーで止まった。どうやら最近追加した新しいローテートの定義(上記のhogehoge)で、存在しないディレクトリ・ファイルを指定してしまっている様子。
おそらく、複数ある Webサーバのうち、特定のサーバで動くアプリケーションの場合にだけ使っていたログファイルのローテートを全てのWebサーバで設定したため、そのアプリが稼働していないサーバで logrotate が異常終了し、apache のログファイルもローテートされなかったようだ。
ファイルを消しちゃうと後々不便なので、hogehoge のファイルの中身をコメントアウトして回避。


しかし、ログファイルが見つからなかっただけで異常終了しなくても、スキップしてくれればいいのに・・・というわけにはいかない理由があるんだろうな…


/etc/logrotate.d/ で追加・変更した場合は、logrotate -d でちゃんとチェックしよう。


※ 2010/04/20 追記
ファイルだけがない場合は、missingok のオプションがあればエラーをスキップするようです。
が、今回はディレクトリ自体がなかったため、glob が失敗し、logrotate が異常終了したようです。
追加情報 Thanks. > id:kopug