Linux
如何使用 logrotate 移動壓縮文件
這可能非常容易做到,但我找不到與該主題相關的任何內容。我正在為我們服務中的日誌設置一個自定義 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 腳本執行之後並且僅當至少一個日誌旋轉。這些指令可能只出現在日誌文件定義中。整個模式作為第一個參數傳遞給腳本。如果腳本因錯誤退出,則僅顯示一條錯誤消息(因為這是最後一個操作)。另請參閱第一個動作。