web-dev-qa-db-fra.com

J'ai besoin d'un ordonnanceur Nodejs permettant d'effectuer des tâches à différents intervalles

Je recherche un emploi du temps de nœud qui me permettra de planifier un certain nombre de tâches à des intervalles différents. Par exemple,

  • appelez la fonction A toutes les 30 secondes
  • appelez la fonction B toutes les 60 secondes
  • appelez la fonction C tous les 7 jours

Je veux aussi pouvoir démarrer et arrêter le processus.

Jusqu'à présent, j'ai examiné:

  • plus tard - la syntaxe m'embrouille, apparemment aussi vous ne pouvez pas programmer de tâches au-delà d'un mois

  • agenda - semble le plus prometteur, mais je suis confus quant à la fonctionnalité de la base de données

  • timeplan - trop simple, ne peut pas démarrer et arrêter

Je trouve la syntaxe de ce dernier déroutant.

121
user379468

Je recommanderais node-cron . Il permet d’exécuter des tâches à l’aide de modèles Cron, par exemple.

_'* * * * * *' - runs every second
'*/5 * * * * *' - runs every 5 seconds
'10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute
'0 * * * * *' - runs every minute
'0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)
_

Mais aussi plusieurs planifications complexes , par ex.

_'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.
_

Exemple de code : exécution du travail toutes les 10 minutes:

_var cron = require('cron');
var cronJob = cron.job("0 */10 * * * *", function(){
    // perform operation e.g. GET request http.get() etc.
    console.info('cron job completed');
}); 
cronJob.start();
_

Vous pouvez trouver plus d'exemples dans node-cron wiki

Plus d'informations sur la configuration de cron peuvent être trouvées sur cron wiki

J'ai utilisé cette bibliothèque dans de nombreux projets et cela fait le travail. J'espère que cela aidera.

207
Tom

J'ai utilisé node-cron et agenda .

node-cron est une bibliothèque très simple, qui fournit des bases très simples et faciles à comprendre, comme crontab. Il n'a pas besoin de configuration et fonctionne simplement.

var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5', function(){...});
myJob.start();

agenda est très puissant et convient à des services beaucoup plus complexes. Pensez à ifttt , vous devez exécuter des millions de tâches. agenda serait le meilleur choix.

Remarque: vous devez utiliser Mongodb pour utiliser Agenda .

var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();
35
Ryan Wu

Je pense que le meilleur classement est

1.node-schedule

2. plus tard

3.crontab

et l'exemple de node-schedule est ci-dessous:

var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
//rule.minute = 40;
rule.second = 10;
var jj = schedule.scheduleJob(rule, function(){
    console.log("execute jj");
});

Peut-être que vous pouvez trouver la réponse de modules de nœuds .

12
Richard Xue

J'ai écrit un module de noeud qui fournit un wrapper autour de setInterval en utilisant des durées de moment fournissant une interface déclarative:

npm installe chaque instant

var every = require('every-moment');

var timer = every(5, 'seconds', function() {
    console.log(this.duration);
});

every(2, 'weeks', function() {
    console.log(this.duration);
    timer.stop();
    this.set(1, 'week');
    this.start();
});

https://www.npmjs.com/package/every-moment

https://github.com/raygerrard/every-moment

10
raygerrard

nodeJS par défaut

https://nodejs.org/api/timers.html

setInterval(function() {
    // your function
}, 5000);
6
Rodrigo Adachi

J'ai écrit un petit module pour faire exactement cela, appelé timexe:

  • Son code simple, petit et fiable et n'a pas de dépendances
  • La résolution est en millisecondes et a une précision élevée dans le temps
  • Cron like, mais pas compatible (ordre inversé et autres améliorations)
  • Je travaille aussi dans le navigateur

Installer:

npm install timexe

utilisation:

var timexe = require('timexe');
//Every 30 sec
var res1=timexe(”* * * * * /30”, function() console.log(“Its time again”)});

//Every minute
var res2=timexe(”* * * * *”,function() console.log(“a minute has passed”)});

//Every 7 days
var res3=timexe(”* y/7”,function() console.log(“its the 7th day”)});

//Every Wednesdays 
var res3=timexe(”* * w3”,function() console.log(“its Wednesdays”)});

// Stop "every 30 sec. timer"
timexe.remove(res1.id);

vous pouvez obtenir la fonctionnalité de démarrage/arrêt en supprimant/ajoutant de nouveau l'entrée directement dans le tableau des travaux timexe. Mais ce n'est pas une fonction expresse.

1
Simon Rigét