logrotate 不会在 crontab 中指定的时间轮换

logrotate 不会在 crontab 中指定的时间轮换

我想知道为什么 logrotate 在通过 crontab 调用时不轮换我的日志文件。

我在 crontab 中的输入是:

50 2 * * * /usr/sbin/logrotate

因此,我的所有日​​志应在晚上 2:50 轮换。我收到来自服务器的状态邮件,其中 logrotate 在 2:50 被调用,因此这似乎有效。

原木旋转正确 - 但不是在 2:50 旋转,而是在上午 9:30 旋转。

我在 Google 上搜索了超过 2 小时,检查了 logrotate.conf 和 logrotate.d 中的文件,但找不到任何可能导致该时间延迟的配置。如果能提示一下可能导致此行为的原因以及如何修改它,我将不胜感激(这些设置是由我的前任配置的,他没有给我留下任何文档)

答案1

logrotate 由 控制anacron

在文件中检查此服务的配置etc\anacrontab。例如,它可以是:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=10
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-4

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

该行START_HOURS_RANGE=3-4表示 anacron 将在凌晨 3 点到 4 点之间的任何时间运行,并且该行RANDOM_DELAY=10意味着它将在开始时间上添加最多 10 分钟的随机时间。

您需要修改它以使其在您需要的时间工作。

答案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

好的,我找到了问题所在:cron.daily 中还有另一个 logrotate 条目,我最近没有看到它

因此 - 至少在 SLES 中 - 您必须在 /etc/sysconfig/cron 中配置 DAILY_TIME,它默认为空,因此通常应在启动后 15 分钟运行。

为什么总是 9:30?我不知道,但是当我将其更改为强制在 4:00 运行时,它实际上会在 4:00 轮换我的日志。

从这里获得信息:https://lists.opensuse.org/opensuse/2011-09/msg00550.html

相关内容