logrotateのログファイル名に日付を設定する

4月 25, 2010

ログローテートの設定において、ログファイル名の末尾を数字ではなく日付にしたい時。
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)

Categories: Linux

No Responses so far | Have Your Say!

Comments are closed.