logrotateはどのように機能しますか?

logrotateはどのように機能しますか?

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サービスに次のことを伝えます。ログファイルを再度開く

関連情報