logrotate 指定執行時間

未分類
因為會在 pi 上跑一些程式/寫 log 檔

所以有用 logrotate 去做把 log 截斷的動作

最近因為變更了程式執行的時間





而 logrotate 又剛好在程式寫 log 檔的期間

產生了 logrotate 變更了原本的檔案名

但我的程式仍然繼續寫變更過的 log 檔案

導致新的那個 log 檔其實是空的

今天的資料都寫到備份的那個檔案去了

google 了一下發現

可以用 root 編輯這個檔案
/etc/crontab
內容如下

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

可以發現 每日定期執行的 cron 在早上6點執行

然後再看
/etc/cron.daily/logrotate

內容如下

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

cron.daily 又去把 logrotate 叫起來

所以 logrotate 也是6點執行(正確的說是6:25)

只要把小時的位置0(6改成0) 就會在午夜12:00執行

如果你有想指定的時間

也可以改成你要執行的時間

存檔之後就ok了


如果你的 daily cron 有跑別的

但你不想變更其他 daily cron job 的時間

那就把 /etc/cron.daily/logrotate 砍掉

然後自己在 /etc/crontab 寫以下內容

0 0 * * * root /usr/sbin/logrotate /etc/logrotate.conf

時間可以自定(上面的範例是午夜12:00)

就完成啦