我是node.js的新手。我需要node.js每五分钟查询一次mongodb,获取特定数据,然后使用socket.io,允许订阅的Web客户端访问这些数据。我已经设置了socket.io部分,当然还有mongo,我只需要知道如何每隔五分钟运行一次node.js然后发布到socket.io.
对此最佳解决方案是什么?
由于
答案 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 project有package.json
使用示例。
答案 3 :(得分:0)
您可以使用this package
var cron = require('node-cron');
cron.schedule('*/5 * * * *', () => {
console.log('running a task 5 minutes');
});