Logrotateは開いているファイルをどのように処理しますか? logrotateは、プロセスが開いているファイルをローテーションできますか?
Roryが説明したように、logrotateからの信号を受け入れないアプリケーションでは、いくつかの方法を使用します。
どちらを使用するかの決定は、ログファイルのサイズとシームレスなログの必要性の両方に依存します。それはあなた自身のリスク分析になるでしょう。ただし、例を示すために、私は実際にcopytruncateを使用する必要がある特定のログでローテーション後の再起動を使用します。ただし、ファイルは多くの場合数ギグであり、コピーには十分長い時間がかかるため、毎晩1〜2秒を失うことが望ましいです。
私は次のように見えるかもしれませんが、それでもトピックに関する誰の専門知識にも興味があります:
copytruncate
Truncate the original log file to zero size in place after cre‐
ating a copy, instead of moving the old log file and optionally
creating a new one.
logrotateは、正しいシグナルをプロセスに送信して、ログファイルを再度開くようにプロセスに指示します。これは、Apacheやmysqlなどの設定なしで機能します。
これは、Apacheのpostrotateスクリプトで確認できます。独自のデーモンがあり、それをlogrotateで動作させたい場合は、デーモンが特定のシグナルをリッスンし、ログファイルを再度開くことを確認してください。
プログラムを変更できない場合は、デーモンにログを自動的にフラッシュする方法があるかどうかを確認できます。または、サーバーを停止するprerotateと、サーバーを再起動するpostrotateを追加します。