私はソフトウェアを作成しており、プロセスが logrotate などから SIGHUP を受け取ったときにログ ファイルをリロードしたいと考えています。問題は、logrotate がローテーションされたログ ファイルの圧縮を開始するまでに、アプリケーションが使用できる時間はどのくらいかということです。
マニュアルページと私が見つけたすべての参考資料には、アプリケーションがログを「すぐに」再読み込みする必要があるとだけ記載されていますが、たとえば、これを 1 ミリ秒で実行する必要があるのか、1 秒で実行する必要があるのかについては記載されていません。
答え1
安全のために言うと、全くありません。
Logrotate は、postrotate コマンドが終了すると、ログ ファイルにはそれ以上書き込まれないと想定します。「ログ ファイルを閉じるのに時間がかかる場合があります」という状況に対処するには、次の 2 つの方法があります。
- logrotateの
delaycompress
オプションは、圧縮ステップを次logrotate の呼び出し。この方法では、次の logrotate の実行にかかる時間と同じだけ長くかかることがあります (ただし、これを行うのはかなり悪い考えです)。 - デーモンにログファイルを閉じて再度開くように指示するコマンドラインツールを作成し、このコマンドがないデーモンがすべてのログ ファイルが閉じられたことを確認するまで、終了します (ログ ファイルが再度開かれるまで待つ必要はありませんが、開いても問題ありません)。その後、logrotate の
postrotate
スタンザからこのコマンドライン ツールを使用できます。