Logrotate 在错误的时间/时间运行

Logrotate 在错误的时间/时间运行

我的/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 作为嵌入式系统安装脚本的一部分编辑此文件,则会发生这种情况。问我我是怎么知道的!

相关内容