logrotateのログファイル名に日付を設定する
ログローテートの設定において、ログファイル名の末尾を数字ではなく日付にしたい時。
logrotate-3.7.3以降の場合、”dateext”を記述するだけでいいらしい。
なんだ、簡単じゃないか、と思ったが。。
以下の文言を発見してしまった。
※http://tech.ckme.co.jp/linuxadmin.shtmlより
CentOS 5では、logrotateにバグがあり、dateextやcompressなどのオプションが使えない。
しかしこんなのも発見。
※http://d.hatena.ne.jp/snufkinski/20090520/1242815344より
CentOS 5.3 の logrotate-3.7.4-9 (09-Mar-2009 10:46) では修正されたようです。
うーん、じゃあ大丈夫なのか???
(よく読むと別のバグの話かもしれない・・・)
それからこんな注意点も発見してしまった。
※http://ameblo.jp/itboy/entry-10028063448.htmlより
ローテーションした後のファイル名を変更してしまうと、世代数の
管理(設定した世代数を超えた場合に、対象のログファイルを削除する)が行えません。
(logrotateは、ファイルの後についた数値で世代数を管理しているようなので、
その数値がなくなってしまうと、世代が管理できなくなってしまいます)
対処用スクリプトサンプルも上記サイト内にあるので、必要であれば参考にさせて
もらうとして・・・
まずは”dateext”を試してみて、駄目だったら結局スクリプトで対応か。
/etc/logrotate.d/syslog に記述
endscript
lastaction
DATE=`/bin/date +%Y%m%d`
for logfile in messages secure maillog spooler boot.log cron
do
mv /var/log/$logfile.1.gz /var/log/$logfile.${DATE}.gz 2> /dev/null || true
rm /var/log/$logfile.${DATE} –date “1 months ago”`.gz 2> /dev/null || true
done
endscript
/var/log/以外の個別スクリプトだったらこれだけ加えればいいかな。。
lastaction
DATE=`/bin/date +%Y%m%d`
mv *.1.gz *.${DATE}.gz←これはいけてません
endscript
logrotateはバグっていたり、バージョンによる挙動の違いが多々あったりして、
ハマっている人が多い様子。なんだかあれこれと情報が錯綜しているので、
もうやってみないとわからん、という状況だ。
何か分かったらまた追記しようと思う。
追記:mvコマンドは複数のファイルに適用できないことを忘れてた、、、
ログが数種類あるならやはりfor文を利用しなくてはならない。
“dateext”がいけるのかどうかはわからない。
時間があれば検証したいところだが。(2010/04/26)