如果我们的Linux主机是24全天全年的处于开机状态,我们只需要atd与crond这两个服务即可,如果我们的服务器并非24小时无间断的启动,那么我们就需要anacron的帮助了。
anacron并不能取代cron去运行某项任务,而是以天为单位或者是在启动后立刻进行anacron的动作,它会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止了。
anacron会以一天、七天、一个月周期去侦测系统中未进行的crontab任务,因此对于某些特殊的使用环境非常有帮助。anacron会去会去分析现在的时间与时间记录档所记载的上次运行anacron的时间,两者比较厚若发现有差异,也就是在某些时刻没有进行crontab,那么此时anacron就会开始执行未运行的crontab了。所以anacron也是听过crontab来运行的,因此anacron运行的时间通常由两个,一个是系统启动期间运行,一个是写入crontab的排程中,这样才能够在特定时间分析系统未进行的crontab工作。我们可以使用ll /etc/cron*/*ana*的方式来查看anacron的侦测时间。但是我们仔细分析该文件的话,发现它主要是执行anacron命令。
anacron命令的语法如下:
(1)-s开始连续的运行各项工作,会一句时间记录当的数据判断是否进行。
(2)-f强制进行,而不去判断时间登录档的时间戳。
(3)-n立即进行未进行的任务,而不延迟等待时间。
(4)-u仅升级时间记录当的时间戳,不进行任何工作。
而anacron的配置文件是/etc/anacrontab,而它的很多内容则是在/var/spool/anacron里面保存。
当anacron下达anacron -s cron.daily时,它会有如下的步骤:
(1)由/etc/anacrontab分析到cron.daily这项工作名称的天数为一天。
(2)由/var/spool/anacron/cron.daily取出最近一次运行anacron的时间戳。
(3)把取出的时间戳与当前的时间戳相比较,如果差异超过了一天,那么就准备进行命令。
(4)若准备进行命令,根据/etc/anacrontab的配置,将延迟65分钟。
(5)延迟时间后,开始运行后续命令,也就是run-parts /etc/cron.daily这串命令。
(6)运行完毕后,anacron程序结束。
原文地址:http://blog.csdn.net/xinguimeng/article/details/44898251