在我的项目中,我使用npm cron运行了超过100个cron jon。我的问题是我需要在运行时停止任何cron作业。
我的代码是 在app.js文件中
var CronJob = require('cron').CronJob;
module.exports = {
startServiceFromCronJobManager: function (scheduleServiceName) {
var serviceList =['service1','service2','service3','service4']
serviceList.forEach(function(service){
var job = new CronJob('* * * * * *', function(){
console.log("Service running");
}, function () {
// This function is executed when the job stops
},
true /* Start the job right now */,
timeZone /* Time zone of this job. */
);
global.jobManager.service = job;
});
},
stopServiceFromCronJobManager: function (scheduleServiceName) {
console.log(global.jobManager);
global.jobManager[scheduleServiceName].stop();
}
};
在cronJobHandle.js
var cronJobRunner =require('cronJobHandle.js');
app.route('/stopservice',function(req,res){
cronJobRunner.stopServiceFromCronJobManager("service1");
}
router.js
Delivery Notification
当我致电http://localhost:9999/stopservice时 我在console.log(global.jobManager);
中得到了undefine请帮助我如何维护所有服务器端js文件的cron jobManager变量comman
答案 0 :(得分:2)
全局,但代码中有两个错误。
1)您正在调用名为"service"
的财产,而不是名称位于service
的财产。
更改
global.jobManager.service = job;
到
global.jobManager[service] = job;
2)你可以在cronJobHandle.js中使用global.jobManager
,然后在app.js中声明它
有一个更好的解决方案。你不需要也应该使用global
。只需在cronJobHandle.js中声明一个标准变量(这样其它模块就不会访问它):
var jobManager = {};
...
jobManager[service] = job;
...
jobManager[scheduleServiceName].stop();