一、什么是anacron
- 如果你的Linux系统不是24时处于运行状态,但是你的电脑中又设定了一些任务定期执行,那么当你关机之后这些任务就不能执行了
- 承上,anacron的任务就是检测系统中是否有超过时间没有执行的命令。或者当你的Linux系统关机之后再次开机时,检测系统中是否有因为关机本来应该执行却因为关机没有执行的任务。如果有,anacron就会去执行这些任务
- 例如:你有一个任务需要一周执行一次,但是Linux系统关机超过了一个星期,导致这些任务没有执行,那么当你开机之后,anacron程序就会检测到这些程序没有执行,就经过anacrontab设定时间延迟之后,开始执行这些任务
二、anacron的特点
- anacon是一个程序,而不是一个服务
- anacron程序每个小时执行一次,执行时去查找系统中是否有超时没有执行的任务
- anacron其实是每个小时被crond服务执行一次
- at和crontab是【定时】执行任务的,anacron是【定期】执行任务
三、anacron程序执行任务的方式
- 第一步:因为/etc/cron.hourly/0anacron脚本文件设置了每一个小时就要执行anacron -s命令
- 第二步:执行anacron -s命令后,就去读取/etc/anacrontab配置文件中的任务,然后判断时间
四、anacron的配置文件/etc/cron.hourly/0anacron
- anacron程序每个小时被主动执行一次,是因为anacron的配置文件的原因调用其的原因
- 这个文件就是一个脚本程序,最后一行可以看到,这个脚本程序其实就是调用了anacron -s命令
五、anacron命令格式
- anacron [选项] [任务名称]
- anacron -u [任务名称]
相关参数与选项
- -s:开始连续地执行各项任务,会根据时间记录文件的数据判断是否执行
- -f:强制执行,而不去判断时间记录文件的时间戳
- -n:立刻执行未执行的任务,而不延迟等待时间
- -u:仅更新时间记录文件的时间戳,不执行任何任务
- 任务名称:由/etc/anacrontab定义的各项任务名称
六、/etc/anacrontab配置文件:anacron执行任务的记录处
- 这个文件记录了anacron每隔多久就要检查,且需要执行的命令
- RANDOM_DELAY:随机设置最大延迟时间,单位为分钟
- START_HOURS_RANGE:延迟多少小时内应该要执行的任务时间
最后几行数据的格式意义,被分为四部分:
- 天数:这个是当前时间与时间戳(/var/spool/anacron/内的时间记录文件)相差的天数,若超过此天数,就准备开始执行,若没有,就不执行
- 延迟时间:若确定超过天数,要执行后面的任务了,那么就会先延迟这么久,然后再执行,因为怕立即启动占用其他资源,发生冲突
- 工作的名称:就是这项任务的名称
- 该项工作要执行的命令:任务的具体内容
三个command的意义
- nice run-parts /etc/cron.daily:每个一天就要执行这个目录下的程序
- nice run-parts /etc/cron.weekly:每个一周就要执行这个目录下的程序
- nice run-parts /etc/cron.monthly:每个一个月就要执行这个目录下的程序
七、/var/spool/anacron/*时间戳文件
- /etc/anacrontab文件会检查这个时间戳文件,再于当前之间比较算出时间差。再将时间差与/etc/anacrontab文件中的命令需要再次执行的时间间隔作比较
- 这个文件中记录了/erc/anacrontab文件中各个任务上一次执行的时间,用于与当前时间作比较算出时间差
八、具体事例介绍
- 以我们的/etc/cron.daily/目录为例
- 第一步:/etc/anacrontab分析/etc/cron.daily这个任务需要执行的相差间隔为1天
- 第二步:由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳
- 第三步:由时间戳与目前时间进行比较,若大于1天
- 第四步:准备执行命令run-parts /etc/cron.daily
- 第五步:但是要延迟5分钟+3小时(因为START_HOURS_RANGE=3-22,并且days对应为5)
- 第六步:延迟之后,开始执行命令run-parts /etc/cron.daily
- 第七步:执行完毕之后,anacron程序结束