英文文档地址:https://www.npmjs.com/package/node-schedule
项目github地址:https://github.com/node-schedule/node-schedule
水平有限,部分翻译可能存在错误,之后我会陆续在使用中更正,同时也使语句更加通顺,有兴趣的孩子将就看。
Overview概述
Node Schedule是基于时间的调度,而不是基于时间间隔的调度。虽然你可以很轻松的使用Node Schedule做你想做的事,但是如果你仅仅是想做例如“每5分钟运行一次这个函数”,setInterval更容易使用,并且更合适。但是如果你想“在每个月的第三个周二那天的每个小时的20分钟和50分钟运行这个函数”,你会发现Node Schedule更加符合你的需要。此外,Node Schedule不同于true cron,Node Schedule有windows版本支持,因为node runtime已经得到了充分的支持。
Jobs and Schedule任务和调度
在 Node Schedule中,每一个调度的任务都由一个Job 对象表示,你可以手动创建一个任务,然后使用schedule()方法应用计划,或者应用更加简便的方法scheduleJob(),就像下面的demo一样。
Job对象是一个EventEmitter对象(事件驱动),每次运行会发送一个事件。
它们还会在每次调度运行时发出调度事件,并在执行调用之前取消事件(两个事件都会接收JavaScript日期对象作为参数),请注意,任务会立即计划,所以如果你使用scheduleJob的简便方法,你会错过第一个计划的任务,
Cron-style Schedule
Cron格式包括:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
Cron格式的例子:
var schedule=require("node-schedule");
var j=schedule.scheduleJob("42 * * * *".function(){
console.log("The answer to life, the universe, and everything!")
} )
var j=schedule.scheduleJob("0 17 * 0,4-6",function(){
console.log9("Today is recognized by Rebecca Black!");
})
Unsupported Cron Features
目前,不支持W(最近的工作日),L(月/星期的最后一天)和#(该月的第n个工作日),其他常用的cron的功能支持得很好
cron-parser用于解析crontab指令。
Date-based Schedule基于日期的调度
比如你特别想要一个函数在2012年12月21日上午5:30执行。记住,在JavaScript中0代表1月,11代表12月
var schedule = require("node-schedule");
var date = new Date(2012, 11, 21, 5, 30, 0);
var j=schedule.scheduleJob(date,function(){
console.log("The world is going to end today");
}
你可以使用cancel()方法取消任务
j.cancel();
在将来使用现在的数据你可以使用绑定:
var schedule= require("node-schedule");
var date = new Date(2012, 11, 21, 5, 30, 0);
var x = "Tada!";
var j = schedule.schedule(date,function(y){
console.log(y);
}).bind(null,x);
x = "Changing Data";
当计划任务运行的时候,将会打印“Tada!”而不是“Changing Data”, 尽管x已经在计划之后立即被改变了
Recurrence Rule Schedule
你可以设置特定的重复规则,当一个任务需要重复的时候,例如,考虑这个规则,一小时后每小时的42分钟时执行这个函数。
var schedule = require("node-shedule");
var rule = new schedule.RecurrenceRule();
rule.minute = 42;
var j = schedule.scheduleJob(rule, function(){
console.log("The answer to life, the universe, and everything");
})
你也可以用指定可接受值的数组和Range对象通过可选的步骤参数来指定开始和结束值的范围,例如以下将在星期四、星期五、星期六和星期天的5点打印一条信息:
var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0,new schedule(4,6)];
rule.hour = 17;
rule.minute = 0;
var j = schedule.scheduleJob(rule, function(){
console.log("Today is orcognized by Rebecca Black!");
})
注意:值得注意的是,循环规则组件的默认值是Null(秒除外,为了熟悉cron,它为0)。如果我们没有明确地将分钟设置为0,则该消息可能将在下午5:00,下午5:01......下午5:59被打印,这可能不是你想要的。
Object Literal Syntax对象字面量语法
为了更简便一些,Node-schedule还支持对象字面量语法,就像下面这个例子一样,将在每个周日的下午2:30打印一条信息
var j = schedule.scheduleJob({hour:14, minute:30, dayOfWeek:0},function(){
console.log("Time for tea!");
})
最后是一个广告贴,最近新开了一个分享技术的公众号,欢迎大家关注