おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

logrotateでログのローテーションをする

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 設定ファイル名