我想知道为什么 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