web-dev-qa-db-fra.com

Planifier le travail Node.js toutes les cinq minutes

Je suis nouveau sur node.js. J'ai besoin de node.js pour interroger un mongodb toutes les cinq minutes, obtenir des données spécifiques, puis en utilisant socket.io, permettre aux clients Web abonnés d'accéder à ces données. J'ai déjà la partie socket.io configurée et bien sûr mongo, j'ai juste besoin de savoir comment faire tourner node.js toutes les cinq minutes puis poster sur socket.io.

Quelle est la meilleure solution pour cela?

Merci

26
Paul
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);

Enregistrez ce code sous node_regular_job.js et exécutez-le :)

68
alessioalex

Voici comment procéder si vous aviez des tâches asynchrones à gérer:

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

Vous ne pouvez cependant pas garantir quand il commencera, mais au moins vous n'exécuterez pas plusieurs fois le travail en même temps, si votre travail prend plus de 5 minutes pour s'exécuter.

Vous pouvez toujours utiliser setInterval pour planifier un travail asynchrone, mais si vous le faites, vous devez au moins marquer les tâches traitées comme "en cours de traitement", de sorte que si le travail doit être planifié une deuxième fois avant les finitions précédentes, votre logique peut décider de ne pas traiter les tâches qui sont encore en cours de traitement.

2
Christophe Vidal

@ alessioalex a la bonne réponse lors du contrôle d'un travail à partir du code, mais d'autres pourraient trébucher ici à la recherche d'une solution CLI. Vous ne pouvez pas battre sloth-cli .

Exécutez simplement, par exemple, sloth 5 "npm start" courir npm start toutes les 5 minutes.

Ce projet a un exemple package.json utilisation.

2
John Vandivier

Vous pouvez utiliser ce package

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

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