Linux

如何使用 logrotate 移動壓縮文件

  • November 7, 2019

這可能非常容易做到,但我找不到與該主題相關的任何內容。我正在為我們服務中的日誌設置一個自定義 logrotate.conf 文件。作為其中的一部分,我想保留最多 7 天的日誌,壓縮超過 7 天的任何內容,並刪除任何超過 22 天的內容。到目前為止,我正在嘗試測試是否可以將壓縮文件移動到另一個目錄,以防止主日誌目錄變得過於混亂。

到目前為止,我的規則如下:

/home/user1/logs/profile_service/*.log
{
   daily
   rotate 7
   copytruncate
   compress
   postrotate
               mv /home/user1/logs/profile_service/*.gz /home/user1/logs/archive/profile_service/
   endscript
}

我對此的理解是 postrotate 應該將那些 .gz 文件移動到存檔目錄中。但是,當我手動執行 logrotate 時:

logrotate -f /home/user1/logrotate.conf

它輪換日誌並將日期附加到文件中,但無法壓縮日誌,並且沒有任何內容進入存檔:

mv: cannot stat ‘/home/user1/logs/profile_service/*.gz’: No such file or directory
logrotate_script: line 2: compress: command not found
error: error running non-shared postrotate script for /home/user1/logs/profile_service/profile.log of '/home/user1/logs/profile_service/*.log
'

當我不包括 postrotate 來移動文件時,文件被正常壓縮。

試試lastaction/endscript

從手冊頁:

lastaction 和 endscript 之間的行(兩者都必須單獨出現在行上)在所有與萬用字元模式匹配的日誌文件被輪換後執行一次(使用 /bin/sh),在 postrotate 腳本執行之後並且僅當至少一個日誌旋轉。這些指令可能只出現在日誌文件定義中。整個模式作為第一個參數傳遞給腳本。如果腳本因錯誤退出,則僅顯示一條錯誤消息(因為這是最後一個操作)。另請參閱第一個動作。

引用自:https://serverfault.com/questions/991018