Apache
logrotateでApacheのログローテート
金曜日, 5 月 29th, 2009Apacheのログファイルのローテート。
今までは自分でスクリプトを作って、cronに登録してやってました。
こんな感じ。
—–
YMD=`env TZ=JST+15 date ‘+%Y%m%d’`
cp /usr/local/apache2/logs/access_log /usr/local/apache2/logs/access_log_${YMD}.log
cp /usr/local/apache2/logs/error_log /usr/local/apache2/logs/error_log_${YMD}.log
cp /dev/null /usr/local/apache2/logs/access_log
cp /dev/null /usr/local/apache2/logs/error_log
/usr/local/apache2/bin/apachectl graceful
—–
あんまりスマートじゃないような気がする。
ということで、logrotateを使うことにしました。
ローテートしたいログの設定ファイルを/etc/logrotate.d/内に作成。
—–
/usr/local/apache2/logs/access_log {
daily
rotate 30
dateext
create 0644 root root
postrotate
/usr/local/apache2/bin/apachectl graceful > /dev/null 2>&1
endscript
}
/usr/local/apache2/logs/error_log {
daily
rotate 30
dateext
create 0644 root root
postrotate
/usr/local/apache2/bin/apachectl graceful > /dev/null 2>&1
endscript
}
—–
『daily』は毎日。ここは他に『weekly』『monthly』などもある。
『rotate 30』は30世代分を残す。
『dateext』はローテートされたファイル名に日付をつける。
『create 0644 root root』は新規ログファイルを指定のパーミッション・ユーザ・グループで作成する。
『postrotate~endscript』はローテート後に実行するコマンド。ここではApacheをgracefulします。
最後にlogrotateを手動で実行。
# /usr/sbin/logrotate /etc/logrotate.d/hogehoge
初回は/var/lib/logrotate.statusにログファイル名と日付が保存されるだけで、ローテートはされない。
—–
”/usr/local/apache2/logs/access_log” 2009-5-29
”/usr/local/apache2/logs/error_log” 2009-5-29
—–
日付の部分を1日前(今回は『daily』なので1日。周期によってここは変える。)に書き換える。
これで完了。
デフォルトだと、AM04:02にローテートされます。
↓役に立ったと思ったら・・・

