Anacron 是一项在每次系统重新启动后运行的服务,检查在系统关闭时运行的任何 cron 和计划作业,因此尚未运行。
它扫描 /etc/cron.hourly/anacron 文件的三个因素以确定是否运行这些错过的作业。
这三个因素是 /var/spool/anacron/cron.daily 文件的存在、自 anacron 上次运行以来经过的 24 小时时间以及系统交流电源的存在。
如果所有三个因素都是肯定的, anacron 会继续并根据定义的设置和条件自动执行位于 /etc/cron.daily 、 /etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本在 anacron 的主配置文件 /etc/anacrontab.conf 中。
/etc/anacrontab 文件的默认内容如下所示:
$ cat /etc/anacrontab SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root RANDOM_DELAY=45 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
该文件定义了五个环境变量: SHELL 和 PATH 变量设置用于执行脚本的 shell 和路径(在此文件的底部定义); MAILTO 定义了用户名或者发送任何输出和错误消息的电子邮件; RANDOM_DELAY 表示以分钟为单位的最大随机延迟(添加到最后三行第二列中定义的作业的基本延迟),而 START_HOURS_RANGE 表示作业可以开始的小时数范围。
上面示例输出中的最后三行定义了计划和要执行的脚本。
第一列代表以天为单位的时间段(或者@daily、@weekly、@monthly 或者@yearly),anacron 用于检查指定的作业是否已在此天或者周期内执行,第二列指定以分钟为单位的延迟anacron 在执行作业之前等待,第三列标识作业标识符,第四列指定用于执行 /etc/cron.daily、/etc/cron.weekly 和 /etc/cron 内容的命令.monthly 文件。
这里的run-parts命令用于在默认niceness下执行三个目录位置下的所有文件。
对于每个作业, anacron 会检查该作业是否在指定的天数或者时间段(第 1 列)之前运行过,如果不是,则在等待分钟数(第 2 列)后执行该作业。
Anacron 可以在命令提示符下手动运行。
例如,要运行在 /etc/anacrontab 文件中计划但被错过的所有作业,我们可以发出以下命令:
# anacron
Anacron 将其执行日期存储在位于 /var/spool/anacron 目录中的每个定义的计划的文件中。