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


10

我放入一个logrotate配置文件,/etc/logrotate.d/并期望日志在一致的时间轮流旋转;但是,它们没有...对数旋转时间似乎是随机的+/- 1小时。

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


信息性:我的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
}

Answers:


10

关键是知道CentOS在/ etc / cron中运行脚本。{ 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 cron...


请记住,如果应该在运行anacron的情况下关闭服务器,则它将在系统启动后的某个时间运行。因此,您仍然可以将日志轮换作为不同的时间。可能不是一个大问题,但值得注意。
AngerClown 2012年

将START_HOURS_RANGE设置为单个值(= 3)将不起作用,因为此var预期范围,而不是单个数字。因此在上面的示例中应为3-4。
斯拉维克

6

没有答案,但是我最近正试图通过另一个原因来解决这个问题,并且找不到有关Redhat 6,Centos等如何运行cron的任何文档。这是我反向工程的内容:

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

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

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


4

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

我总是通过将特定的日志轮换作业从cron.daily硬编码为in的条目移动到我的系统上的特定日志轮换问题cron.d。这样,您仍然可以对诸如updateb之类的服务进行交错运行,其中时间并不是真正必要的,而是日志轮换的一致时间。

当然,当达到一定大小时,无论如何,您都希望将所有日志从主机发送到日志服务器,然后各个节点上文件的轮转时间就变得不那么重要了,因为这些文件仅用于便利性(通常在文件尾部之后)或作为最后一种备用。然后,您一定要将日志服务器上的轮换设置为系统化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.