Apacheのログローテーション

 ■ログローテーションするためのシェルスクリプト

logrotate.sh

#! /bin/sh
#
# Apache Log Rotate
#

# ログファイルが置いてあるディレクトリを指定する。
LOGDIR="/export/home/www/logs"

# ログローテーションしたいファイルを指定する。(複数OK)
LOGFILES="access_log error_log script_log ssl_misc_log"

# (1)か(2)を選ぶ。

# (1) 今日の日付を取得する。(日本時間。TZ=JST-9 date と date は等価)
DATE=`TZ=JST-9 date +%Y%m%d`

# (2) 昨日の日付を取得する(24時間前の日付を取得。-9+24=15)
DATE=`TZ=JST+15 date +%Y%m%d`

# ログファイルをバックアップする。
for i in $LOGFILES
do
    mv $LOGDIR/$i $LOGDIR/$i.$DATE
done

# Apacheを再起動する。
kill -HUP `cat /var/run/httpd.pid`
sync

# バックアップしたログファイルを圧縮する。
for i in $LOGFILES
do
    gzip $LOGDIR/$i.$DATE
done
sync

# バックアップしたログファイルと新規ログファイルのオーナーを変更する。
for i in $LOGFILES
do
    chown foo:staff $LOGDIR/$i.$DATE.gz
    chown foo:staff $LOGDIR/$i
done

 

■cronで毎晩、自動実行させる

# crontab -e
# Crontab fields:
#
#        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/cron.daily/logrotate.sh