Content #
如果某个作业在cron时间表中设置的运行时间已到,但这时候Linux系统处于关闭状态,那么该作业就不会运行。当再次启动系统时,cron程序不会再去运行那些错过的作业。为了解决这个问题,许多Linux发行版提供了anacron程序。
如果anacron判断出某个作业错过了设置的运行时间,它会尽快运行该作业。这意味着如果Linux系统关闭了几天,等到再次启动时,原计划在关机期间运行的作业会自动运行。有了anacron,就能确保作业一定能运行,这正是通常使用 anacron代替cron调度作业的原因。
anacron程序只处理位于cron目录的程序,比如/etc/cron.monthly。它通过时间戳来判断作业是否在正确的计划间隔内运行了。每个cron目录都有一个时间戳文件,该文件位于/var/spool/anacron:
$ ls /var/spool/anacron cron.daily cron.monthly cron.weekly $ $ sudo cat /var/spool/anacron/cron.daily [sudo] password for christine: 20200619 $
anacron程序使用自己的时间表(通常位于/etc/anacrontab)来检查作业目录: $ cat /etc/anacrontab
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root
1 5 cron.daily run-parts –report /etc/cron.daily 7 10 cron.weekly run-parts –report /etc/cron.weekly @monthly 15 cron.monthly run-parts –report /etc/cron.monthly $ anacron时间表的基本格式和cron时间表略有不同:
period delay identifier command
period字段定义了作业的运行频率(以天为单位)。anacron程序用该字段检查作业的时间戳文件。delay字段指定了在系统启动后,anacron程序需要等待多少分钟再开始运行错过的脚本。
注意:anacron不会运行位于/etc/cron.hourly目录的脚本。这是因为anacron并不处理执行时间需求少于一天的脚本。
identifier字段是一个独特的非空字符串,比如cron.weekly。它唯一的作用是标识出现在日志消息和错误email中的作业。command字段包含了run-parts程序和一个cron脚本目录名。run-parts程序负责运行指定目录中的所有脚本。
From #
Linux命令行与shell脚本编程大全