我的/etc/crontab
文件中有以下条目,以确保每日 cronjobs 在凌晨 4:25 运行。这是daily
此文件中的唯一条目:
25 4 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
我的内容/etc/cron.daily/
包括logrotate
:
# ls -l /etc/cron.daily/
...
-rwxr-xr-x 1 root root 377 Jan 21 2019 logrotate
这是 logrotate 的配置/etc/logrotate.d/
/var/log/remote/custom/*.log
{
rotate 180
daily
missingok
notifempty
compress
delaycompress
sharedscripts
# force rsyslog to refresh file descriptor
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
为什么当我检查内容时 /var/lib/logrotate/status
,我发现日志文件是在午夜轮换的,而不是在凌晨 4:25 轮换的?
"/var/log/remote/custom/cust.log" 2020-11-4-0:0:39
操作系统:Ubuntu 20.04 LTS
内核:Linux 5.4.0-40-generic
答案1
您似乎忽略了 /etc/anacrontab,anacron 在其中查找何时评估 /etc/cron.daily(及其他)。
这也是我远离 systemd 的众多原因之一。检查 /etc/cron.daily/logrotate 的前几行:
# less -X /etc/cron.daily/logrotate
#!/bin/sh
# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
exit 0
fi
答案2
为了Debian用户,您可能认为它在 6.25 (/etc/crontab) 运行,但从最近的几个版本开始,它在 00.00 运行,并且配置为systemd!
旧的 /etc/crontab :
25 6 * * * root 测试 -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
如果您想更改 systemd 的执行时间,您必须编辑此文件: /etc/systemd/system/timers.target.wants/logrotate.timer
默认情况下是:
[Timer]
OnCalendar=daily
如果您想要每天 6.20 运行它:
[Timer]
OnCalendar=*-*-* 6:20
(然后我重新启动了系统,但我不确定是否有必要!)
答案3
编辑时请务必小心/etc/systemd/system/timers.target.wants/logrotate.timer
- 该文件是 的符号链接/lib/systemd/system/logrotate.timer
。
如果文件意外地从符号链接更改为常规文件,则计时器将被忽略,如果您使用(例如)sed 作为嵌入式系统安装脚本的一部分编辑此文件,则会发生这种情况。问我我是怎么知道的!