Logrotate
Logrotate 不會刪除舊文件
我有一個使用 logrotate 執行的每日備份。我沒有這台機器的 root 訪問權限來編輯正常的 logrotate.conf,因此我
crontab
這樣呼叫它:0 4 * * * /usr/sbin/logrotate /home/myuser/backups/logrotate.conf --state /home/myuser/backups/logrotate.tmp
我的
logrotate.conf
樣子是這樣的:/home/myuser/backups/mysql/production/db.sql.gz { daily nocompress dateext missingok rotate 30 extension *.sql.gz sharedscripts postrotate mysqldump --login-path=production mydatabase --single-transaction | $(which gzip) > /home/myuser/backups/mysql/production/db.sql.gz endscript }
問題是舊的“日誌”(SQL 備份)沒有被輪換關閉/刪除。他們只是堅持。在我的備份目錄中執行
ls -lt
會給我一些奇怪的結果:-rw-r--r-- 1 myuser mygroup 3799057 Apr 17 04:00 db.sql.gz -rw-r--r-- 1 myuser mygroup 3799221 Apr 16 04:00 db.sql.gz-20190417 -rw-r--r-- 1 myuser mygroup 3799167 Apr 15 04:00 db.sql.gz-20190416 -rw-r--r-- 1 myuser mygroup 3799090 Apr 14 04:00 db.sql.gz-20190415 -rw-r--r-- 1 myuser mygroup 3799136 Apr 13 04:00 db.sql.gz-20190414 -rw-r--r-- 1 myuser mygroup 3799107 Apr 12 04:00 db.sql.gz-20190413 -rw-r--r-- 1 myuser mygroup 3792122 Apr 11 04:00 db.sql.gz-20190412 -rw-r--r-- 1 myuser mygroup 3794498 Apr 10 04:00 db.sql.gz-20190411 -rw-r--r-- 1 myuser mygroup 3798082 Apr 9 04:00 db.sql.gz-20190410 -rw-r--r-- 1 myuser mygroup 3793882 Apr 8 04:00 db-20190409.sql.gz -rw-r--r-- 1 myuser mygroup 3793695 Apr 7 04:00 db-20190408.sql.gz -rw-r--r-- 1 myuser mygroup 3794418 Apr 6 04:00 db-20190407.sql.gz -rw-r--r-- 1 myuser mygroup 3790567 Apr 5 04:00 db-20190406.sql.gz -rw-r--r-- 1 myuser mygroup 3792162 Apr 4 04:00 db-20190405.sql.gz -rw-r--r-- 1 myuser mygroup 3783503 Apr 3 04:00 db-20190404.sql.gz -rw-r--r-- 1 myuser mygroup 3781192 Apr 2 04:00 db-20190403.sql.gz -rw-r--r-- 1 myuser mygroup 3782857 Apr 1 04:00 db-20190402.sql.gz -rw-r--r-- 1 myuser mygroup 3785592 Mar 31 04:00 db-20190401.sql.gz -rw-r--r-- 1 myuser mygroup 3771475 Mar 30 04:00 db-20190331.sql.gz -rw-r--r-- 1 myuser mygroup 3771263 Mar 29 04:00 db-20190330.sql.gz -rw-r--r-- 1 myuser mygroup 3751782 Mar 28 04:00 db-20190329.sql.gz -rw-r--r-- 1 myuser mygroup 3632604 Mar 27 04:00 db-20190328.sql.gz -rw-r--r-- 1 myuser mygroup 3744550 Mar 26 04:00 db-20190327.sql.gz -rw-r--r-- 1 myuser mygroup 3608617 Mar 25 05:00 db-20190326.sql.gz -rw-r--r-- 1 myuser mygroup 3642558 Mar 24 05:00 db-20190325.sql.gz -rw-r--r-- 1 myuser mygroup 3600705 Mar 23 05:00 db-20190324.sql.gz -rw-r--r-- 1 myuser mygroup 3735972 Mar 22 05:00 db-20190323.sql.gz -rw-r--r-- 1 myuser mygroup 3600285 Mar 21 05:00 db-20190322.sql.gz -rw-r--r-- 1 myuser mygroup 3737448 Mar 20 05:00 db-20190321.sql.gz -rw-r--r-- 1 myuser mygroup 3741454 Mar 19 05:00 db-20190320.sql.gz -rw-r--r-- 1 myuser mygroup 3603502 Mar 18 05:00 db-20190319.sql.gz -rw-r--r-- 1 myuser mygroup 3617021 Mar 17 05:00 db-20190318.sql.gz -rw-r--r-- 1 myuser mygroup 3612493 Mar 16 05:00 db-20190317.sql.gz -rw-r--r-- 1 myuser mygroup 3753894 Mar 15 05:00 db-20190316.sql.gz -rw-r--r-- 1 myuser mygroup 3742415 Mar 14 05:00 db-20190315.sql.gz -rw-r--r-- 1 myuser mygroup 3733984 Mar 13 05:00 db-20190314.sql.gz -rw-r--r-- 1 myuser mygroup 3594213 Mar 12 05:00 db-20190313.sql.gz -rw-r--r-- 1 myuser mygroup 3594515 Mar 11 05:00 db-20190312.sql.gz -rw-r--r-- 1 myuser mygroup 3622672 Mar 10 05:00 db-20190311.sql.gz
我是否以某種方式誤解了 的行為
logrotate
?
看起來您的 30 個文件(最舊的文件)正在使用命名方案(db-DATE.sql.gz),而新文件的命名方式不同(db.sql.gz-DATE)。看起來較新的也應用了dateext選項。這讓我想到了兩種可能性:
- 您在達到旋轉/刪除文件的門檻值之前更改了命名方案,因此 logrotate將刪除匹配新命名方案 (db.sql.gz-DATE) 的文件,但僅當它們超過 30 個時(目前有是 9 個文件)。舊名稱的文件必須由您手動刪除。
- 您有 2 個不同的 logrotate conf 文件處理同一組日誌文件。(可能在 /etc/logrotate.d 中)。也許當您測試時,您執行
logrotate /etc/logrotate.d/your_conf.conf
並因此繞過了一些設置/etc/logrotate.conf
(如dateext)。現在 crontab 正在執行 logrotate 主文件並生成文件命名的差異。