Подтвердить что ты не робот

Запланируйте работу Node.js каждые пять минут

Я новичок в node.js. Мне нужно node.js запросить mongodb каждые пять минут, получить конкретные данные, а затем использовать socket.io, разрешить подписным веб-клиентам получать доступ к этим данным. У меня уже есть функция socket.io и, конечно, mongo, мне просто нужно знать, как node.js запускать каждые пять минут, а затем отправлять в socket.io.

Какое лучшее решение для этого?

Спасибо

4b9b3361

Ответ 1

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 и запустите его:)

Ответ 2

Вот как это сделать, если у вас есть какие-то задачи async для управления:

(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));
})();

Вы не можете гарантировать, однако, когда он начнется, но по крайней мере вы не будете запускать многократное задание одновременно, если ваше задание занимает более 5 минут.

Вы можете использовать setInterval для планирования асинхронного задания, но если вы это сделаете, вы должны по крайней мере пометить обработанные задачи как "обрабатываемые", так что если задание будет запланировано во второй раз перед предыдущие заканчиваются, ваша логика может решить не обрабатывать задачи, которые все еще обрабатываются.

Ответ 3

@alessioalex имеет правильный ответ при управлении работой из кода, но другие могут наткнуться здесь в поисках решения для CLI. Вы не можете победить sloth-cli.

Просто запустите, например, sloth 5 "npm start" чтобы запускать npm start каждые 5 минут.

Этот проект имеет пример использования package.json.

Ответ 4

Вы можете использовать этот пакет

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

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