logrotateを学ぶ
ログを出してくれるプログラムはあるが普通はログを自動で圧縮、分割などしてくれない。なので、そのままにしておくとそのプログラムのログは肥大していく。
この肥大していくログファイルを肥大させずにうまいこと残せておけるようにするのがlogrotate。何世代分ログを残すか、1世代とする期間をどうするかなどの設定を行うことで使用する。
設定ファイル類
/etc/logrotate.conf デフォルト設定値
/etc/logrotate.d/以下
http、mysql などの各アプリケーションごとの設定ファイル
当然ながら各アプリケーション用の設定ファイルのが優先度は高い。設定ファイルの書き方は他のところを見たら良いじゃない。
実行形式
logrotatedとかいうものがあるわけではなく、logrotate自身はcronで実行される。
/etc/cron.daily/logrotate
に実行ファイルがあるように、1日1回実行される。
実行スクリプト
/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
という感じ。引数としてlogrotate.confファイルを渡してる。ちなみにlogrotate.d以下の各プログラムごとの設定ファイルはlogrotate.conf内でincludeしている。
if文の中はlogrotate自身のエラーログ出力制御。logrotateの終了ステータスが0でない、つまり正常実行できなかった場合は/var/log/messageにエラーをあげる。
実行ログ
/var/lib/logrotate.status に各ログごとのローテート記録が書かれている。
"/var/log/cron" 2011-1-2
"/var/log/maillog" 2011-1-2
というような感じ。末尾の日付が最後のそのログをローテートした日付。この日付を見てlogrotateはローテートするべきかを決定する。