Solaris | Apacheのログローテーションを毎晩0時に実行する
- 2008.04.08
- Solaris
毎晩0時にApacheのログをローテーションする。
1月1日0時 〜 1月1日24時 > access_log.20080101.gz
1月2日0時 〜 1月2日24時 > access_log.20080102.gz
という感じ。
Apacheを再起動するので、root ユーザで実行する。再起動といっても停止・起動ではなく、kill -HUPしているだけ。
■Apacheのログをローテーションするスクリプト
logrotate.sh (700か744にしてrootだけが実行できるようにしておく)
#! /bin/sh # # Apache Log Rotate # # LOGDIR="/export/home/www/logs" LOGFILES="access_log error_log script_log ssl_misc_log" DATE=`TZ=JST-2 date +%Y%m%d` # access_log, error_log...それぞれ日付を付けたファイル名にする。 # ファイルが存在しなくても処理は続けられる。 for i in $LOGFILES do mv $LOGDIR/$i $LOGDIR/$i.$DATE done # Apacheを再起動する。 kill -HUP `cat /var/run/httpd.pid` sync # 圧縮すると10分の1程度になる。 for i in $LOGFILES do gzip $LOGDIR/$i.$DATE done sync # 必要であれば所有者を変更する。 for i in $LOGFILES do chown tanaka:tanaka $LOGDIR/$i.$DATE.gz chown tanaka:tanaka $LOGDIR/$i done
LOGDIR ログが置いてあるディレクトリを指定する。
LOGFILES ログファイル名を指定する。複数指定が可能。
DATE 夜、0時にこのスクリプトが実行されるので、前日の日付を求める。
今が、00:02:54だとすると、
$ date Tue Apr 8 00:02:54 JST 2008
一時的にタイムゾーンを指定して表示する。上と同じ表示になる。
$ TZ=JST-9 date Tue Apr 8 00:02:54 JST 2008
7時間前の時間を求めると、確実に前日を求めることができる。JST-9+7なので、JST-2となる。
TZ=JST-2 date Mon Apr 7 17:02:03 JST 2008
7時間後の場合は、JST-9-7なので、JST-16となる。(プラスとマイナスが逆なので注意)
■Cronで毎晩0時にログローテーションを実行する
rootユーザが実行できるようにsu – してからcronを編集する。
# cron -e
# minute (0-59), # hour (0-23), # day of the month (1-31), # month of the year (1-12), # day of the week (0-6 with 0=Sunday). 0 0 * * * /etc/scripts/logrotate.sh
数日間は、mailコマンドで、大きなエラーが発生していないかチェックする。
問題なかったので、 ログを捨てる記述を加えた。
0 0 * * * /etc/scripts/logrotate.sh > /dev/null 2>&1
-
前の記事
Solaris | Hyper Estraierの画面表示を変更する(全文検索システム) 2008.03.31
-
次の記事
Apacheのバージョンを表示させない 2008.04.09