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

我在/etc/logrotate.d/了一个logrotateconfiguration文件,并且希望日志一致地轮换; 然而,他们不…logging旋转时间似乎随机+/- 1小时。

为什么日志的旋转开始时间是随机的,我该如何改变呢?


信息:我的logrotateconfiguration文件看起来像这样…

 /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 } 

关键是知道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 

设置RANDOM_DELAY=0 / START_HOURS_RANGE=3解决了问题…

编辑

经过进一步的思考,我要去除anacron并安装正常的vixie cronanacron并没有真正devise在服务器上运行,我应该只使用正确的工具来完成这项工作。 有人想知道当RH把anacron为默认的cron时,RH在想什么。

不是答案,但我最近试图找出另一个原因,并找不到任何文档如何Redhat的6,Centos等运行cron。 这是我反向工程:

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

所以,比以前的版本更复杂。

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

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

我总是通过将具体的日志轮转作业从cron.daily到具有cron.daily中的硬编码时间的条目来解决在我的系统上特定的日志轮转问题。 这样,你仍然得到像updatedb这样的服务的交错运行,其中时间真的不是必要的,但是对于日志轮换是一致的。

当然,当你达到一定的规模时,你会希望所有的日志从主机发送到一个日志服务器,然后文件在各个节点上的轮换时间就不那么重要了,因为那些只是为了方便(通常在文件的尾部之后)或者作为最后的手段后备。 那么,你一定会把你的日志服务器的轮转设置为系统的。