编辑使用node-cron创建的任务

时间:2018-07-19 11:16:42

标签: node.js mongodb scheduled-tasks node-cron

尝试使用节点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。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。使用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()

答案 1 :(得分:1)

否,不可能将这样的对象存储在数据存储中。您将需要其他系统来管理您的任务。

这样的系统可以是一个全球可用的管理器,您可以在其中按某个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,
};

module1.js

const TaskManager = require('TaskManager.js');

const task = cron.schedule( /* ... */ );
const id = TaskManager.add(task);
DB.store('task_id', id)

module2.js

const TaskManager = require('TaskManager.js');

const id = DB.get('task_id');
const task = TaskManager.get(id);

另一种方法可以是TaskManager,它侦听事件或定期检查数据库中的值并基于该值停止任务。