2009/05/17

LinuxでApacheやTomcatのログをローテーションするならlogrotate

以下2ファイルを/etc/logrotate.dに配置する。
それだけ。

<ファイル名: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 を無視するバグが直ってるっぽい
  このエントリーをはてなブックマークに追加
tsutaken at 21:29│Comments(0)技術 | Linux

コメントする

名前
 
  絵文字