今天是20160201,生产定时任务停止执行的日子。。。
生产使用的定时任务组件为node-schedule,版本号^0.2.6。
看日志31日晚十点多之后就停止了,没有任何迹象就那么停止了,无迹可寻。项目中的定时任务为动态配置的,由于分布式设计且逻辑稍复杂,所以先缕缕程序,将可能性导致定时任务不执行的情况排查一遍,几乎没有。。。很蹊跷。这么蹊跷的事会不会在测试环境出现?再查测试日志,果不其然,测试环境与生产环境出现的同样的问题,在31日晚十点多莫名其妙停止。这都是之前没有发生过的。。。突然联想到时间,今天是2月,比较特殊的月份,难道。。。谷歌一把,这个问题果然有被问到,问题的关键就是闰年的2月,根据回到者提供的链接https://github.com/node-schedule/node-schedule/issues/229
好吧看他们一顿讨论有对这个问题处理,果断升级到最新版本,结果问题仍然存在,没有得到解决,最终选择另一个解决方案,组件更换为node-cron,O了
node-schedule使用方法:
var schedule = require('node-schedule');
var j = schedule.scheduleJob('42 * * * *', function(){
console.log('The answer to life, the universe, and everything!');
});
详细参见:https://github.com/node-schedule/node-schedule
node-cron使用方法:
var CronJob = require('cron').CronJob;
var cronExpress = "0 */5 * * * *";
try{
var job = new CronJob(cronExpress,
function() {
console.log("your work content");
}
});
job.start(); //启动
job.stop(); //停止
}catch(err){ //对表达式校验
console.log("cronExpress is invalid");
}
详细内容:https://github.com/ncb000gt/node-cron
二者在功能上不相上下,重要的一点,node-cron可以对表达式进行校验~