2009/05/17
LinuxでApacheやTomcatのログをローテーションするならlogrotate
以下2ファイルを/etc/logrotate.dに配置する。
それだけ。
<ファイル名:apache>
<ファイル名:tomcat>
上記スクリプトの場合、31日分のログを残して、それ以前のものは削除してくれます。
細かい事を言えば、
ログファイルのコピー → 元ファイルの中身削除
までの間にログが出力されると、その内容が消える可能性がある。
なので、夜中(04:02頃)のアクセスがほとんどなく、そんなの気にならないサービス向け。
logrotateで使えるコマンドの詳細はこちらを参照。
Linuxは、Windowsに比べると痒い所に手が届きますね。
日付計算1つとっても、前者はdateコマンドで一発ですが、
後者はロジックを組まなければいけなくて面倒です。。。
【2009/06/25追記】
logrotateの3.7.1-6 〜 3.7.4-8までは、
prerotate/postrotateが動かない不具合があるらしい。。。
あいたた(>_<)
・logrotateのバグ
・CentOS 5.x の logrotate で postrotate を無視するバグが直ってるっぽい
それだけ。
<ファイル名:apache>
# Logrotate file for Apache
/usr/local/apache2/logs/*log {
missingok
copytruncate
daily
rotate 31
}
<ファイル名:tomcat>
# Logrotate file for Tomcat
/usr/local/apache-tomcat-6/logs/catalina.out {
missingok
copytruncate
daily
rotate 31
sharedscripts
postrotate
/bin/rm -f /usr/local/apache-tomcat-6/logs/`date --d '32 days ago' '+*%Y-%m-%d.log'`
endscript
}
上記スクリプトの場合、31日分のログを残して、それ以前のものは削除してくれます。
細かい事を言えば、
ログファイルのコピー → 元ファイルの中身削除
までの間にログが出力されると、その内容が消える可能性がある。
なので、夜中(04:02頃)のアクセスがほとんどなく、そんなの気にならないサービス向け。
logrotateで使えるコマンドの詳細はこちらを参照。
Linuxは、Windowsに比べると痒い所に手が届きますね。
日付計算1つとっても、前者はdateコマンドで一発ですが、
後者はロジックを組まなければいけなくて面倒です。。。
【2009/06/25追記】
logrotateの3.7.1-6 〜 3.7.4-8までは、
prerotate/postrotateが動かない不具合があるらしい。。。
あいたた(>_<)
・logrotateのバグ
・CentOS 5.x の logrotate で postrotate を無視するバグが直ってるっぽい