web-dev-qa-db-ja.com

Logrotateしてファイルを開く

Logrotateは開いているファイルをどのように処理しますか? logrotateは、プロセスが開いているファイルをローテーションできますか?

21
Kyle Brandt

Roryが説明したように、logrotateからの信号を受け入れないアプリケーションでは、いくつかの方法を使用します。

  1. Copytruncateオプションを使用する
  2. Post-rotateステートメントを追加してサービスを再起動します

どちらを使用するかの決定は、ログファイルのサイズとシームレスなログの必要性の両方に依存します。それはあなた自身のリスク分析になるでしょう。ただし、例を示すために、私は実際にcopytruncateを使用する必要がある特定のログでローテーション後の再起動を使用します。ただし、ファイルは多くの場合数ギグであり、コピーには十分長い時間がかかるため、毎晩1〜2秒を失うことが望ましいです。

7
Scott Pack

私は次のように見えるかもしれませんが、それでもトピックに関する誰の専門知識にも興味があります:

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. 
17
Kyle Brandt

logrotateは、正しいシグナルをプロセスに送信して、ログファイルを再度開くようにプロセスに指示します。これは、Apacheやmysqlなどの設定なしで機能します。

これは、Apacheのpostrotateスクリプトで確認できます。独自のデーモンがあり、それをlogrotateで動作させたい場合は、デーモンが特定のシグナルをリッスンし、ログファイルを再度開くことを確認してください。

プログラムを変更できない場合は、デーモンにログを自動的にフラッシュする方法があるかどうかを確認できます。または、サーバーを停止するprerotateと、サーバーを再起動するpostrotateを追加します。

5
Rory