每五分钟安排一次Node.js作业

时间:2011-11-04 15:46:01

标签: mongodb node.js socket.io

我是node.js的新手。我需要node.js每五分钟查询一次mongodb,获取特定数据,然后使用socket.io,允许订阅的Web客户端访问这些数据。我已经设置了socket.io部分,当然还有mongo,我只需要知道如何每隔五分钟运行一次node.js然后发布到socket.io.

对此最佳解决方案是什么?

由于

4 个答案:

答案 0 :(得分:66)

var minutes = 5, the_interval = minutes * 60 * 1000;
setInterval(function() {
  console.log("I am doing my 5 minutes check");
  // do your stuff here
}, the_interval);

将该代码保存为node_regular_job.js并运行它:)

答案 1 :(得分:2)

如果您要管理一些异步任务,应该怎么做:

((null)) was false: Cannot find image polyline_colors_texture_dim
2015-12-19 15:18:22.961 [5954:60b] ((null)) was false: Image data can't be NULL.
2015-12-19 15:18:22.975 [5954:60b] ((null)) was false: Invalid texture state for routesDimTextureState.
2015-12-19 15:18:24.025 [5954:60b] ((null)) was false: Cannot find image GMSNavSprites-0-2x
2015-12-19 15:18:24.031 [5954:60b] ((null)) was false: Image data can't be NULL.
2015-12-19 15:18:24.039 [5954:60b] ((null)) was false: Cannot find image GMSNavNightModeSprites-0-2x
2015-12-19 15:18:24.044 [5954:60b] ((null)) was false: Image data can't be NULL.

但是你无法保证它什么时候开始,但如果你的工作执行时间超过5分钟,至少你不会同时多次运行这份工作。

您仍然可以使用(function schedule() { background.asyncStuff().then(function() { console.log('Process finished, waiting 5 minutes'); setTimeout(function() { console.log('Going to restart'); schedule(); }, 1000 * 60 * 5); }).catch(err => console.error('error in scheduler', err)); })(); 来安排异步作业,但是如果您这样做,您至少应该将已处理的任务标记为"正在处理",这样如果工作正在进行要在上一次完成之前第二次安排,您的逻辑可能决定不处理仍在处理的任务。

答案 2 :(得分:2)

从代码控制作业时

@alessioalex has the right answer,但其他人可能会在这里偶然发现寻找CLI解决方案。你无法击败sloth-cli

运行,例如,sloth 5 "npm start"每5分钟运行一次npm start

This projectpackage.json使用示例。

答案 3 :(得分:0)

您可以使用this package

var cron = require('node-cron');

cron.schedule('*/5 * * * *', () => {
  console.log('running a task 5 minutes');
});