为什么我的 CentOS logrotate 会随机运行?

Thi*_*his 11 linux centos logrotate cron

我放入了一个logrotate配置文件,/etc/logrotate.d/并希望日志在一致的时间轮换;但是,它们不会……日志轮换时间似乎是随机的 +/- 一小时。

为什么日志轮换开始时间是随机的,我该如何更改?


信息:我的 logrotate 配置文件看起来像这样......

/opt/backups/network/*.conf {
        copytruncate
        rotate 30
        daily
        create 644 root root
        dateext
        maxage 30
        missingok
        notifempty
        compress
        delaycompress
        postrotate
            ## Create symbolic links in daily/
            PATH=`/usr/bin/dirname $1`;
            FILE=`/bin/basename $1`;
            /bin/ln -s $1 $PATH/daily/$FILE
        endscript
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*his 12

关键是要知道 CentOS 在 /etc/cron.{daily,weekly,monthly} 中运行脚本anacron.../etc/anacrontab正在设置RANDOM_DELAY,它可以满足您的预期(RANDOM_DELAY在开始工作之前会延迟几分钟)...

# /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=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#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
Run Code Online (Sandbox Code Playgroud)

设置RANDOM_DELAY=0/START_HOURS_RANGE=3修复问题...

编辑

经过进一步思考,我将删除anacron并安装正常的 vixie cron...


小智 6

不是答案,但我最近出于另一个原因试图解决这个问题,但找不到任何关于 Redhat 6、Centos 等如何运行 cron 的文档。这是我逆向工程的内容:

  1. crond 仍然在系统启动时运行 - 它加载所有文件 /etc/cron.d
  2. /etc/cron.d/0hourly 运行所有文件 /etc/cron.hourly
  3. /etc/cron.hourly/0anacronanacron
  4. anacron 负载 /etc/anacrontab
  5. /etc/anacrontab运行 (via run-parts) /etc/cron.daily/etc/cron.weekly/etc/cron.monthly

因此,它比以前的版本更复杂。

可以通过将每小时、每周和每月条目添加回/etc/crontab(现在为空)来恢复旧行为,但anacrontab也需要更新。这可能会也可能不会破坏未来的更新......


mat*_*tdm 5

其他答案包括如何但不一定是为什么。的原因是为了保持夜间同步cron作业杀死你的基础设施。(想象一下共享存储,或者可能在一台 VM 主机上运行 1000 台服务器,或者只是每晚运行某些网络服务的作业。)

我总是从移动特定的日志循环作业解决这个问题,在特定对我的系统日志轮换cron.daily与在硬编码时间的条目cron.d。这样,您仍然可以获得诸如updatedb之类的服务的交错运行,其中时间确实不是必需的,但日志轮换的时间是一致的。

当然,当您达到一定大小时,无论如何您都希望将所有日志从主机发送到日志服务器,然后各个节点上文件的轮换时间就不那么重要了,因为这些只是为了方便(通常跟随文件的尾部)或作为最后的后备。然后,您肯定会将日志服务器上的轮换设置为系统化。