ログをローテートしたくなった。
# portinstall logrotate # cd /usr/local/etc # cp logrotate.conf.sample logrotate.conf # mkdir logrotate.d
インストール
# vim /usr/local/etc/logrotate.d/blog.perl.tv /var/log/httpd-blog.perl.tv*.log { monthly # daily, weekly, monthly から選択 missingok rotate 12 # ログをローテートする回数(monthlyで12回なので、1年分) compress # ログを圧縮する。しない場合は、nocompress delaycompress # 次のローテーションタイミングで圧縮する ifempty # ファイルが空でもローテートする。しない場合はnotifempty create 660 root wheel sharedscripts postrotate killall -HUP httpd endscript }
設定ファイルの内容は上記。これが全て。
# /usr/local/sbin/logrotate -d /usr/local/etc/logrotate.d/blog.perl.tv reading config file /usr/local/etc/logrotate.d/blog.perl.tv reading config info for /var/log/httpd-blog.perl.tv*.log Handling 1 logs rotating pattern: /var/log/httpd-blog.perl.tv*.log monthly (12 rotations) empty log files are rotated, old logs are removed considering log /var/log/httpd-blog.perl.tv-access.log log does not need rotating considering log /var/log/httpd-blog.perl.tv-error.log log does not need rotating not running shared postrotate script, since no logs were rotated
-dでテスト。実行はされない。
# vim /var/log/logrotate.status (もしくは/var/run/logrotate.status)
logrotate state -- version 2
"/var/log/httpd-blog.perl.tv-access.log" 2009-2-11←ここの日付を変える
"/var/log/httpd-blog.perl.tv-error.log" 2009-2-11
「log does not need rotating」と言われたら、上記ファイルの日付を変更すると実行できます。初回は実行されないみたい。
/usr/local/sbin/logrotate -v /usr/local/etc/logrotate.d/blog.perl.tv
実行。「-v」は詳細表示。-vを抜いてこれをcronに入れればOK。
logrotateは、単純に古いファイルをmoveし、新しいファイルを作成し、過去ファイルを圧縮するだけの機能を持つ。ファイルの中身の日付は見てくれない。
参考
http://ameblo.jp/itboy/entry-10027962914.html
http://itbtech.itboost.co.jp/inst/inst_25.php