railsのproduction.logなどをローテーションする一般的な方法、logrotateについてのメモ書きです。
基本
/etc/logrotate.confにデフォルトの設定
/etc/logrotate.d/配下に個別の設定を書く
利用できるディレクティブ(の一部)
- daily or weekly or monthly
- ログのローテーション間隔
- missingok
- ログファイルがない場合でもエラーにしない
- rotate n
- n回ローテーションする
- compress
- ローテーションされたログを圧縮
- delaycompress
- 次回のログローテーションサイクルになるまで圧縮しない
- notifempty
- ログファイルが空ならローテートしない
- create 0644 user group
- ログファイルのパーミッションと所有ユーザの設定
- copytruncate
- 通常、ローテートするときは、既存のログを移動させた後に新しいログファイルを作る。copytruncateを指定した場合は動作が変わり、ログのコピーした後に、既存のログのサイズを0にする動作になる。ログファイルを閉じないプログラム(rails含む)は、この指定をしないとずっと同じログファイルに書き込みが行われてしまう。コピーしてサイズを0にする少しの間だけログがlostされる。この指定をするとcreateが無効になる(新しいファイルを作らないので)
- dateext
- ログファイル末尾につく数値の代わりに日付(YYYYMMDD)がつく
設定ファイルの確認
下記コマンドで設定ファイルが正しいかなどの調査ができる
logrotate -dv 設定ファイル名