logrotate
ログのローテートコマンド
メイン
- /etc/logrotate.conf
各種
- /etc/logrotate.d/*
初回実行
/var/lib/logrotate.status にローテート対象ファイルが記載されてる
"/opt/domains/wiki.renoretriever.net/logs/access.log" 2014-1-16
当然そこに記載してないファイルに関しては、ローテートされない
初回実行時にはこのファイルに記載されるだけで、実際にはローテートされない
動作確認には、ファイルを編集するか、翌日再確認するかになる
デバッグ
# logrotate -d /etc/logrotate.d/test
/etc/logrotate.conf
の設定は読まないので設定値はデバッグ対象のファイルに書いてあるものが全て
即時ログローテート
全部
# logrotate -f /etc/logrotate.conf
一部
# logrotate -f /etc/logrotate.d/test
注意点
- 上記の場合、共通設定の記載してある、/etc/logrotate.conf の設定内容を読み込まないため、上手く動作しない場合がある
- rotate 無い場合、ファイル消えます
複数ファイルをログローテート対象
/var/log/test01.log /var/log/test02.log { daily missingok notifempty rotate 7 size 1M }
copytruncate 方式の欠点
- copytruncate を使用したローテションの場合、
1. 元ファイルのコピーを作り
、2. 元ファイルの内容をクリアする
という動作によってローテーションを実現- ログを出力しているプロセス(Apache)から見れば永遠に同じファイルに出力し続ければよいため,プロセスの再起動が不要
- ただ 1 と 2 の間のわずかな時間に発生したログは,コピーのファイルには含まれずしかもクリアされるということになってしまい,結果として消滅
- copytruncate を使用したローテションの場合、
Options
項目 | 説明 |
---|---|
compress | ローテート後、圧縮(gzip) |
missingok | 対象のファイルがなくてもエラは出さない |
notifempty | ログファイルが空ならローテートしない |
sharedscripts | 複数指定したログファイルに対し、postrotate または prerotate で記述したコマンドを実行 |
olddir [dir] | ローテーションした旧ログを [dir] に移動 移動先は元と同じデバイス上でなければならない 元のログに対する相対指定も有効 |
postrotate script endscript | 実際にローテーションが行われた後 (lastaction よりは前) に実行するスクリプト 個別指定内でのみ指定可能 |
prerotate script endscript | 実際にローテーションの条件に合致するログファイルがひとつでもあった場合に、ローテーションの前に (firstaction よりは後) に実行するスクリプト 個別定義内でのみ指定可能 |
rotate [num] | 世代ローテーションのステップ数 例えば元のログファイルが a.log だとして、num を 2 にしておくと a.log => a.log.1 => a.log.2 => 廃棄 となる 0 だと a.log => 廃棄 |
size num[K/M] | ログのサイズが num バイトを超えていればローテーションを行う この条件は daily, weekly などの条件より優先される キロ/メガバイトでの指定も可能 |