概要
nginxのログファイルを調べていたら、正常にローテートできているものとそうでないものがあった。
環境
CentOS 6.5
原因
デバッグモードで動かしてみたところ、下記のエラーが出ていた。
$ logrotate -d /etc/logrotate.d/nginx
removing old log /var/log/nginx/hoge.access.log.53.gz
error: error opening /var/log/nginx/hoge.access.log.53.gz: No such file or directory
ログファイルを消そうとしているけど存在しないって言われている。
設定ファイル
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 maro maro
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
'missingok'は入れているが、削除しようとした場合はエラーを出すようだ。
結論
'/var/lib/logrotate.status' に、ローテートの状況が残ったままでログが手動で削除されたっぽい(誰かの手によって)。
対処法
'/var/lib/logrotate.status' このファイルを退避させて再生成したらうまく回るようになった。
備考
ログファイルのパーミッションが原因だとばかり思い込んでいた。