Расписание работы Node.js каждые пять минут - PullRequest
20 голосов
/ 04 ноября 2011

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

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

Спасибо

Ответы [ 4 ]

67 голосов
/ 04 ноября 2011
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 голосов
/ 13 февраля 2018

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

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

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

2 голосов
/ 19 декабря 2015

Вот как вы должны поступить, если вам нужно было управлять некоторыми асинхронными задачами:

(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 для планирования асинхронной работы, но если вы это сделаете, вы должны как минимум пометить обработанные задачи как «обрабатываемые».", так что если задание будет запланировано во второй раз до завершения предыдущего, ваша логика может решить не обрабатывать задачи, которые еще обрабатываются.

0 голосов
/ 05 июля 2019

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

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

cron.schedule('*/5 * * * *', () => {
  console.log('running a task 5 minutes');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...