Utils


启用计划任务

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脚本

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脚本 指每天在指定时间执行一次的脚本,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 需要传递给脚本的对象