Anacron 配置

anacroncron在桌面系统中的软件.(其实桌面系统也有cron.)

你可能会问, 为什么要有一个桌面系统版本啊? 因为, 桌面系统不是服务器, 不需要也不可能24小时运行, 所以anacron的意义就是在一个非24小时运行的机器上执行计划任务.

比如说, 当你在笔记本上运行了一个每天晚上11点备份文件的脚本, 但是你不可能确保每天晚上11点都会开机啊, 那么备份就不会运行了么? 对于cron来说是的, 因为过了那个点儿了, 他就不会运行了, 但是对于anacron来说就不是, 因为他就是专门应付这种情况的, 如果今天晚上11点没有运行备份脚本, 那么当你再次启动计算机的时候, 他就会立即执行这个备份脚本. 同样, 如果系统待机也会是这样, 当系统再次被唤起的时候就会执行那些本该执行却没有执行的计划任务.

Anacrontab格式

正如cron的记录文件是/etc/crontab一样, anacron也有一个记录文件/etc/anacrontab.

/etc/anacrontab的格式为:

  1. period delay job-identifier command

第一个字段是执行的周期, 如果写1,就表示每天执行, 如果写7就代表每周执行, 同理, 如果写30,就代表每月执行, 当然, 也可以是任意的阿拉伯数字.

第二个字段是延迟执行的时间, 这个是用来应付那些没有被正常执行的计划任务的, 也就是说, 如果一个任务没有被正常执行(关机待机等情况), 当再次开机后, 需要延迟多长时间再次执行. 它的单位是分钟.

第三个字段是任务的标识(zhi4)符, 每个文件都必须又一个独一无二的标识符, 标识符文件保存在/var/spool/anacron/目录下, 每个文件记录着不同任务上次执行的时间, 这也就解释的通为什么它可以在开机后执行那些没有被正常执行的任务了.

第四个字段是要执行的命令, 比如要执行一个脚本, 就可以写"/bin/sh /root/bala/backup.sh".

举个栗子

  1. cat /etc/anacrontab
  2. 7 15 test.daily /bin/sh /root/bala/backup.sh

每七天执行备份脚本, 任务的标识符为test.daily, 如果没有正常运行, 则在开机后15分钟之后再次运行.

两个变量

START_HOURS_RANGERANDOM_DELAY

干什么用呢? 慢慢说.

上面的这个例子是, 每天执行一个脚本, 什么时候执行? 开机十五分钟之后执行. 但是, 如果你的笔记本一周不关机怎么办? 难道备份脚本就不要执行了吗? 肯定不行啊. 所以这个时候就需要/etc/anacrontab里的变量(START_HOURS_RANGE)了.

默认的值是3-22, 也就是凌晨3点到晚上10点, 这个时间段所谓一个开机周期, 如果过了这个周期, 那anacron就会知道新的一天开始了.

上面提到的第二个变量也有点意思, 刚才我们说到开机15分钟之后执行那个脚本, 但是真实情况还要加点东西, 加点什么呢? 加的就是这个RANDOM_DELAY内的分钟数, 默认的RANDOM_DELAY值是45, 也就是说, 每个任务开启的时间是不确定的, 是在用户指定的时间上在加0-45之间的一个数.

Cron Vs Anacron

CronAnacron
最小执行周期是分钟最小执行周期是天
任何用户都可以运行只允许超级用户运行
要求系统7x24小时运行, 如果某个任务错过了执行时间, 那么它将不会被执行不要求系统7x24小时运行. 如果某个计划任务没有被正常运行, 那么他将在下次开机后再次运行
服务器桌面机或者笔记本

扩展阅读: Cron Vs Anacron