CentOS 5.x の logrotate で postrotate を無視するバグが直ってるっぽい

CentOS 5.2 の logrotate (logrotate-3.7.4-8) で postrotate 内のスクリプトを実行しないバグが、CentOS 5.3 の logrotate-3.7.4-9 で直ってるっぽいです。logrotate の挙動には悩まされたので、公開メモ。


Apacheaccess_log や error_log などを 日次で rotate して 日付を付けて gzip で圧縮している (したい) 方は多いと思います。下記のように postrotate 内のスクリプトで個別にもろもろ処理をしたいが、先のバグのため dateext 等の指定や自作スクリプトなどで対処していらっしゃる方もまた多いのではないでしょうか?

$ cat /etc/logrotate.d/httpd
/home/*/logs/*log {
    daily
    rotate 180
    create
    ifempty
    missingok
    <略>
    sharedscripts
    postrotate
        EXT=`date -d '1 day ago' +%Y%m%d`
        for F in $1; do
        mv $F.1 $F.$EXT
        <その他もろもろ略>
        done
    endscript
}


古いバージョンや他系列のバージョンなら機能するという logrotateのバグCentOS 5.2 の Logrotate などの貴重な情報もあります。それが CentOS 5.3 の logrotate-3.7.4-9 (09-Mar-2009 10:46) では修正されたようです。なんか postrotate 内が動いてないんじゃ ?? とお悩みの方は、以下の検査方法で切り分けできるかと。


【検査方法】
1. テスト用ディレクトリ作成:

$ mkdir -p /tmp/test_log/1 /tmp/test_log/2

2. テスト用設定ファイル (/tmp/test_log/config) 作成:

$ vi /tmp/test_log/config
/tmp/test_log/*/*_log {
    rotate 3
    compress
    missingok
    create
    sharedscripts
        postrotate
        echo $1
    endscript
}

3. テスト用ログ作成:

$ echo "hi" | tee /tmp/test_log/1/access_log > /tmp/test_log/2/error_log

4. テスト実行

$ logrotate -f /tmp/test_log/config

5. テスト結果確認
空行だけしか出力されなければ postrotate は機能してません。

$ /tmp/test_log/1/access_log /tmp/test_log/2/error_log

と表示されれば機能しています。


上記検査方法(再現方法)は、Bug 241766 – Logrotate ignores pre/postrotating scripts arguments (調査依頼書としてお手本にしたい簡潔明瞭さです。)を参考にワイルドカードもきちんと処理されるかを確認できるようにちょっとだけ変更。


【アップデート】

$ cd /usr/local/src
$ wget http://ftp.riken.jp/Linux/centos/5.3/os/i386/CentOS/logrotate-3.7.4-9.i386.rpm
$ rpm -Uvh logrotate-3.7.4-9.i386.rpm

上記 3.4.5.で再検査。


6. (後片付けするなら)

$ rm -fR /tmp/test_log


【※注意※】
ただし、かの logrotate には他にもいろいろバグがあるようで (参考1,2,3) それらが全て logrotate-3.7.4-9 で直っているかは確認していません。さらに Bug 445554 – Logrotate ignores pre/postrotating scripts arguments には、"Regression (退行)" している部分があるとの指摘もありますので、お約束で恐縮ですがくれぐれも各自の用途に沿った選択と自己責任でお願いいたします。


参考1:logrotateのバグ修正および機能拡張アップデート
参考2:https://bugzilla.redhat.com/buglist.cgi?component=logrotate&product=Red%20Hat%20Enterprise%20Linux%204
参考3:https://bugzilla.redhat.com/buglist.cgi?component=logrotate&product=Red%20Hat%20Enterprise%20Linux%205