Logrotate

logrotate daily 指令被忽略

  • January 8, 2013

對於 logrotate,我有一個每小時執行的 cron 任務。

在 logrotate.conf 中有“daily”指令。但是日誌文件每小時輪換一次,而不是每天輪換一次。

為什麼會這樣?這個指令是乾什麼用的?我認為這些與時間相關的指令用於旋轉比執行的工具更少。

$ cat /opt/etc/logrotate.conf
compress
/opt/var/log/dir300.log {
       daily
       rotate 29
       postrotate
               killall -HUP syslog-ng
       endscript
}

.

$ grep logrotate /opt/etc/crontab 
50 */1 * * * admin /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null

$ ls -l dir300.log*
-rw------- 1 admin root 159856 2013-01-08 11:29 dir300.log
-rw------- 1 admin root   6838 2013-01-08 01:50 dir300.log.10.gz
-rw------- 1 admin root     20 2013-01-08 00:50 dir300.log.11.gz
-rw------- 1 admin root    592 2013-01-07 23:50 dir300.log.12.gz
-rw------- 1 admin root    124 2013-01-07 22:50 dir300.log.13.gz
-rw------- 1 admin root     20 2013-01-07 21:50 dir300.log.14.gz
-rw------- 1 admin root     20 2013-01-07 20:50 dir300.log.15.gz
-rw------- 1 admin root    107 2013-01-07 19:50 dir300.log.16.gz
-rw------- 1 admin root     20 2013-01-07 18:50 dir300.log.17.gz
-rw------- 1 admin root     20 2013-01-07 17:50 dir300.log.18.gz
-rw------- 1 admin root     20 2013-01-07 16:50 dir300.log.19.gz
-rw------- 1 admin root  14158 2013-01-08 10:50 dir300.log.1.gz
-rw------- 1 admin root     20 2013-01-07 15:50 dir300.log.20.gz
-rw------- 1 admin root     20 2013-01-07 14:50 dir300.log.21.gz
-rw------- 1 admin root    133 2013-01-07 13:50 dir300.log.22.gz
-rw------- 1 admin root     20 2013-01-07 12:50 dir300.log.23.gz
-rw------- 1 admin root    279 2013-01-07 11:50 dir300.log.24.gz
-rw------- 1 admin root     20 2013-01-07 10:50 dir300.log.25.gz
-rw------- 1 admin root     20 2013-01-07 09:50 dir300.log.26.gz
-rw------- 1 admin root     20 2013-01-07 08:50 dir300.log.27.gz
-rw------- 1 admin root     20 2013-01-07 07:50 dir300.log.28.gz
-rw------- 1 admin root     20 2013-01-07 06:50 dir300.log.29.gz
-rw------- 1 admin root  14236 2013-01-08 09:50 dir300.log.2.gz
-rw------- 1 admin root  14135 2013-01-08 08:50 dir300.log.3.gz
-rw------- 1 admin root  14349 2013-01-08 07:50 dir300.log.4.gz
-rw------- 1 admin root  14396 2013-01-08 06:50 dir300.log.5.gz
-rw------- 1 admin root  14268 2013-01-08 05:50 dir300.log.6.gz
-rw------- 1 admin root  14148 2013-01-08 04:50 dir300.log.7.gz
-rw------- 1 admin root  14347 2013-01-08 03:50 dir300.log.8.gz
-rw------- 1 admin root  14225 2013-01-08 02:50 dir300.log.9.gz

.

$ ipkg list logrotate
logrotate - 3.7.5-2 - Rotates, compresses, removes and mails system log files.

這是因為您-f在下面的 cron 作業命令中使用強制日誌輪換:

50 */1 * * * admin /opt/sbin/logrotate -f /opt/etc/logrotate.conf &>/dev/null

如果您閱讀man logrotate並查看以下段落:

-f, –force

告訴 logrotate 強制旋轉,即使它認為沒有必要。有時這在向 logrotate 配置文件添加新條目後很有用,或者如果手動刪除了舊日誌文件,因為將創建新文件,並且日誌記錄將繼續正確。

從創建的文件時間戳可以清楚地看出這一點。如果您查看以下文件:

-rw------- 1 admin root  14349 2013-01-08 07:50 dir300.log.4.gz
-rw------- 1 admin root  14396 2013-01-08 06:50 dir300.log.5.gz
-rw------- 1 admin root  14268 2013-01-08 05:50 dir300.log.6.gz
-rw------- 1 admin root  14148 2013-01-08 04:50 dir300.log.7.gz
-rw------- 1 admin root  14347 2013-01-08 03:50 dir300.log.8.gz
-rw------- 1 admin root  14225 2013-01-08 02:50 dir300.log.9.gz

您可以很容易地看到每次執行 cron 作業都會創建一個新文件。同樣,這是因為 option -f

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