Linux logrotate の設定

・各ファイル

/etc/logrotate.conf	   logrotate全体の設定ファイル
/etc/logrotate.d/	   個別の設定ファイルを保存するディレクトリ
/etc/cron.daily/logrotate   cronで実行されるスクリプト
/var/lib/logrotate.status  logrotateの状態記録ファイル
/usr/sbin/logrotate      logrotate本体

・全体設定ファイル

# vi /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

・ローテーションはweeklyで実施
・4世代分を保存
・ローテーション後に空ファイルを生成
・ローテーションしたファイルを圧縮しない
・/etc/logrotate.d以下の設定ファイルをinclude
・/var/log/wtmpファイルをmonthlyでローテーションする

・個別設定ファイル

# vi /etc/logrotate.d/httpd 
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

compress
 ローテーションされたログをgzipで圧縮する。
create [パーミッション] [ユーザ名] [グループ名]
 ローテーション後に新たな空のログファイルを作成する。ファイルのパーミッション、ユーザ名、グループ名を指定可。
daily
 毎日ログローテーションする。
weekly
 毎週ログローテーションする。
monthly
 毎月ログローテーションする。
delaycompress
 ログの圧縮作業を次回のローテーション時まで遅らせる
ifempty
 ログファイルが空でもローテーションする。
missingok
 ログファイルが存在しなくてもエラーを出さない。
nocompress
 ローテーションされたログを圧縮しない。
nocreate
 新たな空のログファイルを作成しない。
nomissingok
 ログファイルが存在しない場合エラーを出す。
noolddir
 ローテーション対象のログと同じディレクトリにローテーションされたログを格納する。
notifempty
 ログファイルが空ならローテーションしない。
olddir ディレクトリ名
 指定したディレクトリ内にローテーションされたログを格納する。
prerotate - endscript
 postrotateとendscriptの間に記述されたコマンドをログローテーション前に実行する。
postrotate - endscript
 postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
rotate 回数
 指定した回数だけローテーションする。
size ファイルサイズ
 ログファイルが指定したファイルサイズ以上であればローテーションする。
sharedscripts
 複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを実行する。

・実行ファイル

# vi /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

・/etc/logrotate.conf の設定に従いログローテを実行
・エラーが出た場合はエラーログを出す

・動作テスト

# logrotate -d /etc/logrotate.d/httpd
 ※記述が正しくない場合はエラーが出る、
  実際にログローテはされない。