尝试使用node-cron 'https://github.com/merencia/node-cron‘按计划运行任务。
任务创建和启动:
var cron = require('node-cron'),
task = cron.schedule('* * * * * *', function () {
console.log('task running...',JSON.stringify(task));
}, false);
task.start();要停止任务,请执行以下操作:
task.stop();要销毁任务,请执行以下操作:
task.destroy();当在创建任务的范围内执行任务时,代码可以正常工作。但根据需求,我如何才能稍后从不同的函数访问“任务”。是否可以将任务存储在后端,以便稍后对其执行“stop()”或“destroy()”函数。如果不能使用node-cron,还可以使用其他方法。使用node.js和mongoDb。
发布于 2020-09-16 08:23:58
我也面临着同样的问题。使用node-schedule解决了这个问题:
启动自定义作业:
const campaignId = "MY_CUSTOM_ID"
let job = schedule.scheduleJob(campaignId, '* * * * * *', function () {
console.log('running campaign: ' + campaignId)
})停止自定义作业:
const campaignId = "MY_CUSTOM_ID"
let current_job = schedule.scheduledJobs[campaignId]
current_job.cancel()发布于 2018-07-19 22:38:58
不,不可能将这样的对象存储在数据存储中。您将需要一些其他系统来管理您的任务。
一个这样的系统可以是一个全局可用的管理器,您可以通过某个id注册任务,以便任何知道此id的人都可以访问该任务。然后可以将该id存储在数据库中。
非常简单的实现:
TaskManager.js
const tasks = [];
const add = (task) => {
tasks.push(task);
return tasks.length;
};
const get = (id) => tasks[id];
module.exports = {
add,
get,
};模块1.js
const TaskManager = require('TaskManager.js');
const task = cron.schedule( /* ... */ );
const id = TaskManager.add(task);
DB.store('task_id', id)模块2.js
const TaskManager = require('TaskManager.js');
const id = DB.get('task_id');
const task = TaskManager.get(id);另一种方法可以是TaskManager,它侦听事件或定期检查数据库中的值,并根据该值停止任务。
https://stackoverflow.com/questions/51421286
复制相似问题