logrotateでdelaycompressオプションを使用する場合


33

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

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.

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

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

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

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

delaycompressいつそこにあるのかを使用しても意味がないようcopytruncateです。私は何が欠けていますか?

回答:


27

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


1
を使用している場合copytruncate、プログラムにログファイルを閉じるように指示する必要はありません。だから、それが指定する意味がないdelaycompressと一緒にcopytruncate
アナンドチチポトゥ

6
ログエントリが失われるため、絶対にcopytruncate必要場合以外は使用しないでください。delaycompress提供する他の機能が必要な場合は、両方のオプションを使用できます。最初に解凍することなく以前のログファイルを読み取る機能です。
ウォンブル

copytruncateプログラムにリロードを指示できない場合以外のオプションはありますか?
アナンドチチポトゥ

5
いいえ。だからこそ、吸い込まず、「ログをリロードする」というシグナルを受け入れるソフトウェアを使用する必要があります。
ワンブル

3

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

postrotate
          killall -HUP syslog-ng
  endscript

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


3

を使用しております:

  • 毎日
  • 遅延圧縮
  • nodateext

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.