logrotate 僅壓縮最後 n 個日誌

logrotate 僅壓縮最後 n 個日誌

我需要每天輪換 /var/log/messages 以保留 60 天,其中最後 30 個日誌必須使用 bzip2 進行壓縮。

這是我的日誌旋轉配置:

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

但結果是保留最後 60 個每日未壓縮日誌。如果添加compress,則所有 60 個日誌將被壓縮。

那麼有沒有辦法讓它只壓縮最後 30 個日誌呢?

答案1

我認為 logrotate 沒有這樣的選項可以直接執行此操作。只有一個相關選項是delaycompress將壓縮延遲一個日誌週期(在您的情況下為一天)。也許,您可以透過編寫 shell 腳本來使用該compresscmd選項來檢查到目前為止有多少日誌檔案並壓縮/解壓縮您想要的檔案。

另一種可能性是安排每日cron作業來執行腳本來檢查日誌檔案並壓縮/解壓縮您想要的內容。

相關內容