ScheduleManager 提供了计划任务服务,开发者可以用来实现定时任务功能,如统计过去一天的新增用户量,日均访问量,或者是定期进行数据/缓存清理,又或者是定时给运营人员发送系统邮件等等。
开发者需要编写任务脚本,将脚本文件保存在 ./server/schedule 目录下,如 ./server/schedule/ping_server.js。同时将脚本配置到 ./server/config/%ENV%/schedule.json 里,一个简单的schedule.config内容如下:
// ./server/config/%ENV%/schedule.json
{
"ver": "1.0.0",
"list":[
{ "type":1, "duration":10, "script":"ping_server", option:{ ip:"192.168.1.100" } },
{ "type":2, "time":"00:00:01", "script":"yesterday_data" }
]
}
上面的计划任务配置,定义了2个任务,第一个任务是每隔10秒钟执行一次 ping_server.js 这个脚本;第二个任务是每天00:00:01的时候,执行一次 yesterday_data.js 这个脚本。
接着启动 ScheduleManager :
/* ./main.js */
//app setup ...
app.addTask(function(cb){
require("weroll/schedule/ScheduleManager").start();
cb();
});
//more app setup ...
任务脚本需要暴露 exec 方法,并在脚本运行完成之后,执行回调函数。一个典型的脚本模板如下:
/* your script */
exports.exec = exec(callBack, option) {
//do some jobs
//end script if it has an Error
callBack(err);
}
开发者需要将业务代码写到exec方法里。
option参数是schedule.config配置里,对应此脚本的option数据,如:
{ "type":1, "duration":10, "script":"ping_server", option:{ ip:"192.168.1.100" } }
那么在exec方法里的option参数就上面配置中的option数据:
exports.exec = exec(callBack, option) {
console.log(option.ip); //echo "192.168.1.100"
}
注意:ScheduleManager 是在主程序进程中执行脚本,因此脚本可以共享主进程中的数据,进程结束,脚本也会结束。
Timer脚本 指每隔一段时间就需要执行一次的脚本,不同类型脚本的区别只是在于 schedule.config 的配置,Timer脚本配置如下:
{
"type":1,
"duration":10,
"script":SCRIPT_NAME,
"initExecute":true,
"firstDelay":0,
"disableTime":[ "23:58:00-23:59:59", "00:00:00-00:02:00" ],
"waitCallBack":true,
"option":{ SCRIPT_ARGUMENTS }
}
配置参数详细说明:
Option | Description |
type | 脚本类型,1表示Timer脚本,2表示Daily脚本 |
duration | 脚本执行的时间间隔,单位:秒 |
script | 脚本文件名 |
initExecute | true/false,表示该脚本是否在ScheduleManager启动的时候立即执行一次 |
firstDelay | 表示该脚本第一次执行时需要延时的时间,单位:秒。如设置10,则表示脚本第一次延时10秒才执行 |
disableTime | 数组,表示脚本在这些设定的时间段内不会执行 |
waitCallBack | true/false,表示下一次执行是否需要等待上一次执行的callBack回调。true表示脚本执行callBack回调后,才开始计时下一次执行 |
option | 需要传递给脚本的对象 |
Daily脚本 指每天在指定时间执行一次的脚本,Daily脚本配置如下:
{
"type":2,
"time":"00:00:01",
"script":SCRIPT_NAME,
"initExecute":true,
"option":{ SCRIPT_ARGUMENTS }
}
配置参数详细说明:
Option | Description |
type | 脚本类型,1表示Timer脚本,2表示Daily脚本 |
time | 脚本执行的时间点,格式是:hh:mm:ss |
script | 脚本文件名 |
initExecute | true/false,表示该脚本是否在ScheduleManager启动的时候立即执行一次 |
option | 需要传递给脚本的对象 |