18

毎日非常に重い大きなログ ファイル (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
}

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

ありがとうトーマス

4

4 に答える 4

51

圧縮が完了したら、ファイルに対してスクリプトを実行する方法を実際に探しているときに、このスレッドに出くわした他の誰かの場合に備えて、この情報をここに追加します。

上で提案したように、postrotate/endscriptを使用するのは適切ではありません。

代わりに、完璧に機能するlastaction/endscriptを使用できます。

于 2012-08-22T11:28:27.603 に答える
24

postrotateスクリプトは、sharedscriptsが有効な場合でも、常に圧縮前に実行されます。したがって、最初の回答に対するハスタークンの追加の回答は正しくありません。sharedscriptsが有効な場合、postrotateの前に実行される唯一の圧縮は、delaycompressのために横たわっている古い非圧縮ログ用です。現在のログでは、postrotateスクリプトの実行に圧縮が常に実行されます。

于 2011-11-12T01:47:21.320 に答える
16

スクリプトはpostrotate圧縮が発生する前に実行されます: logrotateのマニュアルページから

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

いずれの場合でも、delaycompress圧縮を次の回転まで延期するオプションを使用できます。

于 2011-09-01T14:46:02.447 に答える