anacron实现异步定时任务调度

Anacron是什么

众所周知,cron是*nix系统下的一种定时任务调度器,可以实现任意用户周期性运行特定任务的需要,常用在自动维护和管理中。而anacron是一种异步的定时任务调度器,大家都知道cron是Linux系统下的定时任务调度器,可以实现异步的任务调度。对于24小时开机运行的服务器可能用不到这种东西,但是非24小时开机,又想定时运行任务的机器还是十分有用的,可以实现异步的调用。

目前很多发行版中的cron是由cronie实现的,而cronie中集成了anacron。

Anacron配置

anacron的配置与cron类似,也是要首先配置一个叫anacrontab的文件,其文件格式说明一般在manual里有man anacrontab

  • 可以定义启动程序的环境变量,其中
    • START_HOURS_RANGE=17-23:表示程序在17时至23时之间会启动
    • RANDOM_DELAY=5:表示定时触发后随机延迟5分钟以内的时间再启动应用(主要是防止一开机多任务同时启动造成负载过重)。
  • 任务定义的格式:
    • 1 5 crawl $HOME/bin/mycrawl:第一列表示格几个小时启动一次,第二列表示触发后延迟的分钟数,最终的延迟时间是5+RANDOM_DELAY,第三列是任务名称,第四列是要运行的命令及相关的参数。

一个完整的配置文件如下:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
RANDOM_DELAY=10
START_HOURS_RANGE=17-23
1   5   crawl   $HOME/bin/mycrawl

将上述文件存储为$HOME/anacrontab,然后运行:

$ anacrontab -t anacronta -S ~/.anacron

运行完后过几分钟,crawl任务便会启动。其中-t参数是指定anacrontab文件,-S参数是指定anacron的缓存路径,这个路径必需是已经建立好的一个目录。

Anacron的实现原理以及使用方式

Anacron是基于cron的,并没有要代替cron,一般的用法是由cron在周期性调用anacron,利用anacron定义的规则来启动相关的应用。比如系统中在/etc/cron.hourly下一般会有一个0anacron的文件,此文件用于启动/etc/anacrontab中定义的任务。如果要实现异步的周期性任务,还需要再定义相应的crontab。

运行crontab -e,并写下按小时调用的规则:

15 * * * * anacrontab -t $HOME/anacrontab -S $HOME/.anacron

每次调用anacrontab时,会监测一下$HOME/.anacron目录下crawl(任务名称)文件是否存在并且其内容是否为当前今天的日期,如果是今天的日期,则表明今天已经调用过了,如果不是今天的日期,则启动$HOME/bin/mycrawl程序,再把内容改为今天的日期。以这种方式实现了即使关机的情况下也会定期运行相关的任务。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章