ボクの覚え書き – CentOSでサーバ構築 サーバー構築やプログラミングの覚え書き

logrotateでApacheのログローテート

05.29.2009 · Posted in 覚え書き

Apacheのログファイルのローテート。
今までは自分でスクリプトを作って、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にローテートされます。

Tags: ,

Comments are closed