====== Logrotate でログ保存 ======
Fetchmail や Procmail がログを出力するが、放置しておくと巨大なファイルになってしまうので、Ubuntu に標準で入っている Logrotate を使って、ログファイルのローテートと削除を行う。今回ローテートするログファイルは、ユーザ権限で作成されているファイルなので、ユーザ権限で Logrotate を起動する。
===== 用意するファイルとディレクトリ =====
* logrotate.conf: ローテートの標準設定を記述したファイル
* logrotate.d: 詳しい設定を記述したファイルを格納するディレクトリ
* logrotate.sh: logrotate コマンドを記述したスクリプト
==== logrotate.conf の作成 ====
システムログのローテート設定をコピーして作成。
~/log/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
# packages drop log rotation information into this directory
include /home/foobar/log/logrotate.d
* include のパスは後で作成する logrotate.d ディレクトリのパス
==== logrotate.d の作成 ====
logrotate.d ディレクトリを作成する。
mkcdir ~/log/logrotate.d/
logrotate.d ディレクトリの中に、各デーモンごとのログローテート設定をファイルに記述して保存する。
Fetchmail のログの場合はこんな感じで。
~/log/logrotate.d/fetchmail
/home/foobar/log/fetchmail.log {
daily
rotate 30
compress
delaycompress
notifempty
create 640 foobar users
}
* 最初の行: 出力されるログファイルのパス
* daily: 24時間でファイルをローテート
* rotate 30: 30個までローテートし、31個目は削除
* compress: ローテートファイルを圧縮する
* delaycompress: ローテート直後のファイルは圧縮しない
* notifempty: ログファイルが存在しない場合は空ファイルを作成
* create 640 foobar users: 作成するログのパーミッションとオーナとユーザを設定
ローテートしたいログファイル分設定ファイルを作成して、logrotate.d に格納しておく。
==== logrotate.sh ====
Logrotate を起動するスクリプト。このスクリプトを cron で実行する。
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate --state /home/foobar/log/logrotate.status /home/foobar/log/logrotate.conf
==== cron に設定 ====
$ crontab -e
以下の行を追加
# Loglotate
0 0 * * * /home/foobar/log/logrotate.sh > /dev/null 2>&1