一、介绍
anacron是一个用于执行周期任务的命令,与cron命令不同,anacron并不认为machine是处于24小时运行的状态,它一般用于不是长期运行的machine上的任务的执行,用来控制按天、按星期、按月执行的任务。
anacron从/etc/anacrontab配置文件中读取任务列表。在/etc/anacrontab配置文件中的每一条指定了任务执行的周期(以天为单位),固定的延迟时间,唯一的任务名称和执行的相应shell命令。
对于/etc/anacrontab配置文件中指定的一条任务,anacron会检查这个任务执行的周期,如果上一次执行这一任务到现在为止的时间间隔超过了执行周期,则anacron会运行这个任务对应的shell命令,当然不是马上运行,而是等待固定的延迟时间之后再执行。当shell命令被执行后,anacron会将执行时间记录到一个特定的文件中,这样下次执行的时候就知道上一次执行的具体时间了。
如果anacrontab中没有任务,则anacron会退出。
anacron任务是由crond来保证定时执行的。crond服务在系统启动后默认启动,crond会周期性执行/etc/cron.d/0hourly,在/etc/cron.d/0hourly中会执行/etc/cron.hourly目录中的任务,在/etc/cron.hourly目录中有0anacron文件,其中会根据判断条件决定时候执行/usr/sbin/anacron -s任务。上一次执行任务的时间被记录在/var/spool/anacron/cron.daily文件中,精确度到天。
二、参数
anacron支持的参数如下:
-f:强制执行所有的任务,忽略时间间隔
-u:更新所有任务的时间戳为当前时间,但是不执行任务
-s:串行化执行所有任务,当前面的任务没有执行完不会执行后面的命令
-n:立即执行任务,忽略时间延迟,-n隐含-s
-d:anacron不在后台运行,所有消息输出到标准输出和syslog中
-q:消息输出到标准错误中,需要和-d一起使用
-t some_anacrontab:使用特定的配置文件,而不是/etc/anacrontab
-S spooldir:指定记录时间戳的目录
-T:测试/etc/anacrontab文件是否书写正确,如果存在错误则输出1,否则输出0.
三、配置文件
默认情况下,我们不需要手动执行anacron命令,只需要维护/etc/anacrontab配置文件,所有的工作都会被自动执行。
anacrontab文件中包含了任务描述行,环境变量行和空行,其中最主要的是任务描述行。任务描述行有下面几个字段:
period in days:指定任务的执行间隔,以天为单位,一般设置为1,7,或者设置为@daily、@weekly、@monthly
delay in minutes:指定在执行任务前等待的间隔,可以设置为0表示立即执行。
job-identifier:在配置文件中唯一的任务标识
command:执行任务的命令
环境变量行的变量:
START_HOURS_RANGE:表示在一天中能够执行任务的时间范围
RANDOM_DELY:运行任务之前随机等待的时间,这个值将会被添加到delay in minutes上。
根据上面的配置信息,我们描述一下anacron的执行流程:
- 读取/var/spool/anacron/cron.daily文件中anacron上一次执行的时间;
- 如果上一次执行的时间距离现在的时间超过一天,就执行cron.daily任务;
- 只会在3-22点之间执行这个任务;
- 执行任务之前强制延迟5min,然后随机延迟0-45min;
- 使用nice run-parts命令执行/etc/cron.daily目录中的任务
四、与cron比较
1.cron任务是通过服务crond来定期执行的,而anacron命令没有守护进程,是被crond定期启动执行的;
2. cron任务在检查到是会立即执行,而anacron会有一个随机延迟时间;
3. cron粒度能够精确到分钟,anacron只能精确到天。