什么是任务定时器:
能够在指定时间定期地执行命令、脚本或者程序,可以被用于系统的自动化维护及管理的工具;
最常见的任务定时器当属 Cron
,该词源于希腊语 chronos,原意是时间;
在类 Unix 系统中,可以通过 crontab
命令设置定时任务执行的时间周期,然后 cron
的守护进程会在后台实时的检测是否有需要执行的任务,通常这些需要执行的任务被称为 cron jobs
;
定时器的参数说明:
Cron
在类 Unix 系统中有很多的实现,如:cronie、bcron、dcron、fcron 等;
虽然实现有多种,但是基于 cron
风格的时序参数结构却是相似的;
这里展示了一个 cron 的时序参数格式:
1 | * * * * * * |
*
表示通配符,匹配任意,当秒为 ‘*’ 时,代表任意秒数都会触发执行;
观察这组参数说明的过程中,发现了一个有趣的问题:
Q
: 在 day of week
参数上,0 或 7 其实都可以代表星期日(Sunday),WHY?A
: 原因在于 cron
的众多实现版本里,对于这个参数,部分实现的设置为:0 - 6 => Sunday - Saturday,而另一部分实现的设置为:1 - 7 => Monday - Sunday,为了兼容,确保两种设置都正确,所以如上;
具体参数设置的试例:
1 |
|
任务定时器在 Node 中的使用
在 Node.JS 中,可以使用 Node-Schedule
这个 npm 包来进行任务定时器的操作:
描述: A cron-like and not-cron-like job scheduler for Node.
安装方式:
1 | npm install node-schdule |
如何使用:
任务定时器的创建:
1 | var schedule = require('node-schedule'); |
scheduleJob()
方法的回调函数用于实现具体定时任务执行的内容;
任务定时器的注销:
1 | j.cancel(); |
基于JS Date类型的时间参数设置:
1 | var schedule = require('node-schedule'); |
注意: 在使用 Date 设置参数是,月份的设定范围是 0~11 ,其中0代表一月,11代表十二月;
4.2.4 递归循环任务的设置:
1 | var schedule = require('node-schedule'); |
指定时间范围的设置:
1 | var rule = new schedule.RecurrenceRule(); |
RecurrenceRule
实例的每个cron属性可接受以数组的形式添加多个时间数值,Range()
方法可指定一个范围的开始值及结束值;
通过对象字面量的方式设置:
1 | // 每周日的14时30分执行 |
任务定时器的开始及结束时间设置:
1 | // 5秒后任务开始执行且10秒后任务结束,任务在此过程中每秒执行一次 |
参考:
http://www.cnblogs.com/zhongweiv/p/node_schedule.html
http://www.codexiu.cn/javascript/blog/16175/
https://zh.wikipedia.org/wiki/Cron