web-dev-qa-db-ja.com

postrotateスクリプトの後のlogrotate圧縮ファイル

非常に重い大きなログファイルを毎日生成するアプリケーションがあるので(1日あたり約800MB)、それらを圧縮する必要がありますが、圧縮には時間がかかるため、アプリケーションにHUP信号を再読み込み/送信した後、logrotateでファイルを圧縮します。

/var/log/myapp.log {
    rotate 7
    size 500M
    compress
    weekly
    postrotate
        /bin/kill -HUP `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

ポストローテーションの後に圧縮が行われるのはすでに事実ですか(これは直感に反するでしょう)。そうでない場合、追加のコマンドスクリプト(オプションまたはいくつかのトリック)なしでそれを行うことが可能であるかどうか誰もが教えてもらえますか?

ありがとうThomas

16
Thomas

postrotateスクリプトは、圧縮が発生する前に実行されます。manページから logrotate

構成ファイルの次のセクションでは、ログファイル/ var/log/messagesの処理方法を定義しました。ログは、削除される前に週に5回ローテーションされます。ログファイルがローテーションされた後(ただし、古いバージョンのログが圧縮される前)、コマンド/ sbin/killall -HUP syslogdが実行されます。

いずれの場合も、delaycompressオプションを使用して、圧縮を次のローテーションまで延期できます。

15
Hasturkun

圧縮が完了した後でファイルに対してスクリプトを実行する方法を実際に検索しているときにこのスレッドに出くわす人がいる場合に、この情報をここに追加します。

上で提案したように、postrotate/endscriptを使用することは、これには適していません。

代わりに、lastaction/endscriptを使用できます。これは完全に機能します。

42
Mark

postrotateスクリプトalways実行beforeの場合でも圧縮sharedscriptsが有効です。したがって、最初の答えに対するHasturkunの追加の応答は正しくありません。 sharedscriptsが有効な場合、postrotateの前に実行される唯一の圧縮はdelaycompressが原因で古い圧縮されていないログが横になっています。現在のログの場合、圧縮はalways実行afterpostrotateスクリプトを実行します。

@Hasturkun-評判が最初に50を超えない限り、コメントを追加することはできません。

Logrotateが何をするかを確認するには、

  1. -d:デバッグを実行して何も実行しない設定をテストし、-f:強制的に実行する
  2. または、-v verboseフラグを使用してlogrotateを実行できます

Postrotateに共有スクリプトを使用する構成

$ logrotate -d -f <logrotate.conf file>

次の手順を示します。

rotating pattern: /tmp/log/messages /tmp/log/maillog /tmp/log/cron
...
renaming /tmp/log/messages to /tmp/log/messages.1
renaming /tmp/log/maillog to /tmp/log/maillog.1
renaming /tmp/log/cron to /tmp/log/cron.1
running postrotate script
<kill-hup-script executed here>
compressing log with: /bin/gzip
compressing log with: /bin/gzip
compressing log with: /bin/gzip
2
Russell E Glaue