logrotate によって頻繁にローテーションされるログ ファイルを監視しようとしています。しかし、正しく実行できません。logrotate が実際にどのように動作するのか説明できる人はいますか?
ファイル名が変更され、新しいファイルが作成されますか?
または、ファイルが新しい名前でコピーされ、現在のファイルは空になりますか?
回転前:
131887 -rw-r--r-- 1 root root 11385 Sep 25 03:40 /var/log/sas.log
回転後:
131887 -rw-r--r-- 1 root root 0 Sep 25 04:40 /var/log/sas.log
131911 -rw-r--r-- 1 root root 11385 Sep 25 04:40 /var/log/sas.log.1
答え1
設定ファイルでオプション truncate が有効になっている場合、ファイルは移動されません。ファイルの内容は新しく作成された別のファイルにコピーされるだけで、現在のファイルはクリアされるため、inode ID は変更されません。実際には、ファイルは変更されません。
答え2
ローテーション時に現在のログファイルは移動され、指定されている場合は圧縮される可能性があります。その後、新しく作成されます。[私の経験以外のソースを探しています]
ローテーション時にログ ファイルを開いたままのサービスが実行中の場合、これは問題となります。ファイルはリンク解除されますが、ファイルがまだ開いているため、ディスク領域は実際には解放されません。
そのため、サービスではローテーションを処理するより複雑な logrotate スクリプトをインストールすることがよくあります。例として、 Web サーバー/etc/logrotate.d/nginx
のローテーション動作の定義を見てみましょうnginx
。
[....]
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
このpostrotate
ブロックは、新しいログファイルが作成された後に実行されます。これは、nginxのサービススクリプトを呼び出して、rotate
サービスに次のことを伝えます。ログファイルを再度開く。