logrotate は最後の n 個のログのみを圧縮します

logrotate は最後の n 個のログのみを圧縮します

/var/log/messages を毎日ローテーションして 60 日間保存する必要があります。最後の 30 件のログは bzip2 で圧縮する必要があります。

これは私のlogrotate設定です:

/var/log/messages {                                                                                              daily
    rotate 60
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true    
    endscript 
}

ただし、結果として、圧縮されていない最後の 60 件の毎日のログが保持されます。 add の場合はcompress、60 件のログすべてが圧縮されます。

では、最後の 30 件のログだけを圧縮する方法はありますか?

答え1

logrotate で直接これを行うオプションはないと思います。関連するオプションは、delaycompress圧縮を 1 回のログ ローテーション サイクル (この場合は 1 日) 遅らせることだけです。おそらく、compresscmdシェル スクリプトを記述して、これまでにいくつのログ ファイルがあるかを確認し、必要なファイルを圧縮/解凍することで、このオプションを利用できます。

もう 1 つの可能性は、cronログ ファイルをチェックし、必要なものを圧縮/解凍するスクリプトを実行する毎日のジョブをスケジュールすることです。

関連情報