我對使用 logrotate 很陌生,我還沒有找到任何有助于解決我當前問題的東西。
我的公司有一個服務器(Debian),我們經常在其中創建 cron 任務來處理通過 FTP 上傳的檔案。為了跟蹤這些提取可能帶來的任何問題,cron 任務始終配置為寫入日志(來自 echos 和 var_dump),以便能夠輕松除錯我們的腳本。
這些日志檔案在檔案名中帶有時間戳,因此一個日志檔案 = 一天執行。為了防止日志使用過多的磁盤空間,并且不手動洗掉舊日志,我想使用 logrotate 來完成這項作業。
例如,這里的日志檔案夾之一如下所示:
-rw-r----- 1 root root 0 May 1 21:55 index-no-guzzle-2022-05-01.log
-rw-r----- 1 root root 0 May 2 21:55 index-no-guzzle-2022-05-02.log
-rw-r----- 1 root root 0 May 3 21:55 index-no-guzzle-2022-05-03.log
-rw-r----- 1 root root 0 May 4 21:55 index-no-guzzle-2022-05-04.log
-rw-r----- 1 root root 0 May 5 21:55 index-no-guzzle-2022-05-05.log
-rw-r----- 1 root root 0 May 6 21:55 index-no-guzzle-2022-05-06.log
-rw-r----- 1 root root 0 May 7 21:55 index-no-guzzle-2022-05-07.log
-rw-r----- 1 root root 0 May 8 21:55 index-no-guzzle-2022-05-08.log
-rw-r----- 1 root root 0 May 9 21:55 index-no-guzzle-2022-05-09.log
-rw-r----- 1 root root 0 May 10 21:55 index-no-guzzle-2022-05-10.log
-rw-r----- 1 root root 0 May 11 21:55 index-no-guzzle-2022-05-11.log
-rw-r----- 1 root root 0 May 12 21:55 index-no-guzzle-2022-05-12.log
-rw-r----- 1 root root 0 May 13 21:55 index-no-guzzle-2022-05-13.log
-rw-r----- 1 root root 0 May 14 21:55 index-no-guzzle-2022-05-14.log
-rw-r----- 1 root root 0 May 15 21:55 index-no-guzzle-2022-05-15.log
-rw-r----- 1 root root 0 May 16 21:55 index-no-guzzle-2022-05-16.log
-rw-r----- 1 root root 0 May 17 21:55 index-no-guzzle-2022-05-17.log
-rw-r----- 1 root root 0 May 18 21:55 index-no-guzzle-2022-05-18.log
-rw-r----- 1 root root 0 May 19 10:14 index-no-guzzle-2022-05-19.log
這是我當前的 logrotate 組態檔:
/root/gun-logs/some-cron-logs-folder/*.log {
daily
missingok
rotate 14
maxage 14
create 640 root root
}
但是,輸出不是我所期望的:
root@myserver:/etc/logrotate.d# ls /root/gun-logs/some-cron-logs-folder/
index-no-guzzle-2022-05-01.log index-no-guzzle-2022-05-07.log.1 index-no-guzzle-2022-05-14.log
index-no-guzzle-2022-05-01.log.1 index-no-guzzle-2022-05-08.log index-no-guzzle-2022-05-14.log.1
index-no-guzzle-2022-05-02.log index-no-guzzle-2022-05-08.log.1 index-no-guzzle-2022-05-15.log
index-no-guzzle-2022-05-02.log.1 index-no-guzzle-2022-05-09.log index-no-guzzle-2022-05-15.log.1
index-no-guzzle-2022-05-03.log index-no-guzzle-2022-05-09.log.1 index-no-guzzle-2022-05-16.log
index-no-guzzle-2022-05-03.log.1 index-no-guzzle-2022-05-10.log index-no-guzzle-2022-05-16.log.1
index-no-guzzle-2022-05-04.log index-no-guzzle-2022-05-10.log.1 index-no-guzzle-2022-05-17.log
index-no-guzzle-2022-05-04.log.1 index-no-guzzle-2022-05-11.log index-no-guzzle-2022-05-17.log.1
index-no-guzzle-2022-05-05.log index-no-guzzle-2022-05-11.log.1 index-no-guzzle-2022-05-18.log
index-no-guzzle-2022-05-05.log.1 index-no-guzzle-2022-05-12.log index-no-guzzle-2022-05-18.log.1
index-no-guzzle-2022-05-06.log index-no-guzzle-2022-05-12.log.1 index-no-guzzle-2022-05-19.log
index-no-guzzle-2022-05-06.log.1 index-no-guzzle-2022-05-13.log index-no-guzzle-2022-05-19.log.1
index-no-guzzle-2022-05-07.log index-no-guzzle-2022-05-13.log.1
我需要的唯一結果是自動洗掉超過 N 天(此處為 14 天)的檔案。
我可以從檔案名中洗掉時間戳,但我認為使用“每日”意味著 logrotate 將在早上 6 點或 7 點左右執行,這是一個問題,因為我們的 cron 任務可以在夜間觸發,這意味著日志將被附加到錯誤的檔案。
那么,我可以為此使用 logrotate 嗎?如果可以,如何使用?如果沒有,這是實作這一目標的最安全方法,考慮到我想自動創建這些組態檔(腳本將創建 cron 檔案夾和所需的檔案,創建日志檔案夾,創建 cron 任務并創建 logrotate組態檔)。
非常感謝您或您的幫助!
uj5u.com熱心網友回復:
好吧,看起來經過更多挖掘后,處理此問題的最佳方法是不使用 logrotate 而是使用 cron 任務來洗掉舊檔案。
使用這個答案對我來說是一個很好的解決方案,我可以每天使用另一個 cron 任務運行該命令。
所以我的命令是:
/usr/bin/find /root/gun-logs/some-cron-logs-folder/ -mtime 14 -name "*.log" -print -delete
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481379.html
