web-dev-qa-db-ja.com

logrotateでdelaycompressオプションを使用するのはいつですか?

logrotateのmanページには次のように書かれています:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

私はこれで混乱しています。ログファイルを閉じるようにプログラムに指示できない場合、プログラムはsometimeではなくforeverを書き込み続けます。圧縮が次のローテーションサイクルに延期された場合、プログラムは次のローテーションサイクルの後でもそのファイルへの書き込みを続行します。問題の解決をどのように延期していますか?

私の理解では、copytruncateは、プログラムにログファイルを閉じるように指示できない場合に使用する必要があります。コピーの進行中に、ログファイルに書き込まれた一部のデータが失われることを認識しています。

私はcouchdbのlogrotateファイルを見ていましたが、copytruncatedelaycompressの両方のオプションがありました。

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

delaycompressがすでに存在する場合、copytruncateを使用しても意味がないようです。何が欠けていますか?

36

copytruncateの理解は正しいですが、delaycompressのマンページの表現は少し誤解を招きます。より適切には、「一部のプログラムに即時そのログファイルを閉じるように指示できない場合」-たとえば、共有スクリプトを使用していて、スクリプトがログを使用してプロセスに信号を送信する場合すべてのログファイルがローテーションされました。

30
womble

を使用しております:

  • 毎日
  • 遅延圧縮
  • nodateext

これにより、Apache access_logaccess_log.1の固定コピーが作成されるため、1日の終わりにStatsパッケージをスクリプトとして実行できます。

翌日、logrotateはファイルを圧縮してaccess_log.2.Zipを作成します

3
Edwardg

私があなたの質問を完全に理解しているかどうかはわかりませんが、あなたが私の考えを尋ねているなら...私はこれを使います:

postrotate
          killall -HUP syslog-ng
  endscript

これは、ログを削除して次のログに移動するための(または少なくとも)良い方法です。 1秒間に大量のデータをログに記録するCiscoのASAプラットフォームなどの「プログラム」は機能します。

3
Warren