logrotate に関するメモ(2002/03/05)
各種アプリケーションから出力されるログを、一定期間毎に分割・待避・圧縮する機能を持つ。
Cobalt の logrotate の設定ファイルは /etc/logrotate.conf が基本で各アプリケーション毎の設定が
/etc/logrotate.d 以下に記述されています。
ちなみに logrotate が実行されるタイミングは
(1) /etc/crontab に記述されている設定通りの時間に /etc/cron.daily 以下のスクリプトが実行される。
(2) /etc/cron.daily/logrotate により logrotate が実行される。
となっています。
ローテーションはされますが、昔のログもすぐには消さず、一時保存されます。
/etc/logrotate.d/apache の中をみると
/var/log/httpd/access {
prerotate
/usr/local/sbin/split_logs web < /var/log/httpd/access
endscript
missingok
postrotate
/usr/bin/killall -HUP httpd 2> /dev/null || true
endscript
daily
}となっていますが、実は Apache から出力されるログは /var/log/httpd/home-access ファイルなのです。ですので、この記述はされていてもローテイトはされません。が、毎日12:00にファイルが綺麗にされているのです。不思議・・・・
とりあえず、apache のログを CustomLog /var/log/httpd/access.log combined と変更して、そのログに合わせて /etc/logrotate.d/apache の記述を変更してみることとします。
/var/log/httpd/access.log {
rotate 5
missingok
compress
size 40M
}'rotate 5' と記述されていますので、5回分ログは(compressされて)保持されます。
上記の場合の処理は、logrotate実行時に /var/log/httpd/access の容量が 40M を越えた場合、
(1) /var/log/httpd/access.log.5.gz があれば削除する。access.log.4.gzがあれば access.log.5.gzに移動、・・・ access.log.1.gzまで繰り返す。
(2) httpd プロセスが /var/log/httpd/access.log を /var/log/httpd/access.log.1 とし新たに/var/log/httpd/access.log を生成してそちらにログを出力する。
(4) /var/log/httpd/access.log.1 を gzip で圧縮する。
という処理が行われます。
ログをもう少し保存したい場合は、例えば以下のようにします。毎月ログを圧縮して、3月分までログファイルを保持する、というケースです。
/var/log/httpd/access.log {
monthly
compress
rotate 3
postrotate
killall -USR1 httpd
endscript
}