weblog of key_amb

主にIT関連の技術メモ

logrotateによるログのローテーション

私の環境はCentOS 5.3です。

logrotateは/etc/cron.daily/にセットされてる。

$ cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

/etc/logrotate.conf内では、/etc/logrotate.d をインクルードしている。
よって、個別のローテーションの設定はこのディレクトリ内に書く。

例えば、この記事によると、Red Hat Linux 7.3のデフォルトでは、/etc/logrotate.d/syslog は次のようになっている。

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null ' 2> /dev/null || true
    endscript
}

logrotateのテスト実行

「logrotateは最後にローテーションした日」の情報を/var/lib/logrotate.statusというファイルに持っている。
従って、テストでローテーションを行いたい時は、このファイルを編集して、該当のログのローテーション日を十分古い日付にすればいい。

$ vi /var/lib/logrotate.status # ローテーション日を改ざん
$ logrotate -v /etc/logrotate.conf # -v はデバッグログ出力