anacron

anacron

anacron 可以看作是对 crontab 命令的补充,主要体现在,cron 设置的定时任务,到了符合时间表达式的时间,如果此时服务器是关机状态,那 cron 配置定时任务就不会执行(废话),而且事后服务器开机了也不会补上,错过了就错过了,因为 cron 配置的定时任务的实践都是精确的,anacron 的出现就是为了解决这个问题,anacron 会以固定的周期检测任务是否执行(其实就是查看执行时间日志,对比当前时间和上次执行的时间,看有没有超过周期)。如果(因为关机)没有执行,则执行任务anacroncron 的区别就在于这个检测固定周期内任务是否执行的行为,而且 anacron 还有延迟时间的选项,可以让任务的执行时间分散,防止一瞬间对服务器产生太大压力。

anacron 不是单独的服务,而是系统命令。也就是说,我们不使用 service anacron restart 命令来管理 anacron 服务,而需要使用 anacron 命令来管理 anacron 工作。这一点跟 cron 很不一样。

anacron [选项] [作业的标识符]

常用参数 -f -n

这里的作业标识符指的是依据 /etc/anacrontab 文件中定义的作业的标识符。

在 Linux 中,其实不需要执行任何 anacron 命令,只需要配置好 /etc/anacrontab 文件,系统就会依赖这个文件中的设定来通过 anacron 执行定时任务了。

/etc/anacrontab 文件

anacron 的重点:/etc/anacrontab 文件:这个文件只有 root 用户可以查看编辑

看起来跟 cron 的配置文件有点像。都是先定义环境变量,再定义执行计划

环境变量

定义执行计划

crontab 命令一样,如果你不将标准输出重定向,命令的执行结果会通过邮件,发送到 /var/spool/mail/root 中(MAILTO 里面配置的)

anacron 和 cron 的联系

/etc/anacrontab 文件的前三个配置项明确地告诉我们,cron.dailycron.weeklycron.monthly 三个目录是 /etc/anacrontab 这个配置文件调用的。

我们用 cron.daily 工作来说明一下 /etc/anacrontab 的执行过程:

  1. 读取 /var/spool/anacron/cron.daily 文件中 anacron 上一次执行的时间。

  2. 和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 工作。

  3. 只能在 03:00-22:00 执行这个工作。

  4. 执行工作时强制延迟时间为 5 分钟,再随机延迟 0~45 分钟。

  5. 使用 nice 命令指定默认优先级,使用 run-parts 脚本执行 /etc/cron.daily 目录中所有的可执行文件。

/var/spool/anacron 执行日志文件夹

执行日志文件夹 /var/spool/anacron ,一个定时任务一个文件,文件名是作业标识符

日志中记录的,是作业执行的时间,任务完成后, anacron/var/spool/anacron 目录内相应的文件中记录日期,注意这里只记录日期,无具体时间,注意,日志文件中只会存一个日期,第二次写入会覆盖第一次写入的值

anacron 与 cron 的区别

从上面可以看出,anacron 其实并不是设计来定时执行任务的,它的主要功能还是为了缓解 cron 中一瞬间大量任务并发执行而导致系统压力过大的问题