Arv*_*ind 5 scheduled-tasks mongodb node.js node-cron
尝试使用 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();
Run Code Online (Sandbox Code Playgroud)
要停止任务:
task.stop();
Run Code Online (Sandbox Code Playgroud)
销毁任务:
task.destroy();
Run Code Online (Sandbox Code Playgroud)
当任务在它们创建的范围内执行时,代码工作正常。但是根据要求,我以后如何从不同的功能访问“任务”。任务是否可以存储在后端,以便稍后对其执行“stop()”或“destroy()”功能。如果用 node-cron 不可能,还有什么可以使用的。使用 node.js 和 mongoDb。
我遇到了同样的问题。使用node-schedule
解决了这个问题:
启动自定义作业:
const campaignId = "MY_CUSTOM_ID"
let job = schedule.scheduleJob(campaignId, '* * * * * *', function () {
console.log('running campaign: ' + campaignId)
})
Run Code Online (Sandbox Code Playgroud)
停止自定义作业:
const campaignId = "MY_CUSTOM_ID"
let current_job = schedule.scheduledJobs[campaignId]
current_job.cancel()
Run Code Online (Sandbox Code Playgroud)
不,不可能在数据存储中存储这样的对象。您将需要一些其他系统来管理您的任务。
其中一个这样的系统可以是一个全局可用的管理器,您可以在其中通过某个 ID 注册任务,以便任何知道该 ID 的人都可以访问该任务。然后可以将该 ID 存储在数据库中。
非常简单的实现:
任务管理器.js
const tasks = [];
const add = (task) => {
tasks.push(task);
return tasks.length;
};
const get = (id) => tasks[id];
module.exports = {
add,
get,
};
Run Code Online (Sandbox Code Playgroud)
模块1.js
const TaskManager = require('TaskManager.js');
const task = cron.schedule( /* ... */ );
const id = TaskManager.add(task);
DB.store('task_id', id)
Run Code Online (Sandbox Code Playgroud)
模块2.js
const TaskManager = require('TaskManager.js');
const id = DB.get('task_id');
const task = TaskManager.get(id);
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是TaskManager
侦听事件或定期检查数据库中的值并据此停止任务。
归档时间: |
|
查看次数: |
1682 次 |
最近记录: |