====== 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