Existe-t-il une bibliothèque de planificateur de travaux pour node.js? [fermé]


155

Existe-t-il une bibliothèque de type cron qui me permettrait de planifier l'exécution d'une fonction à une certaine heure (15h30 par exemple, pas dans x heures, etc.)? S'il n'y a pas ce type de bibliothèque, comment cela devrait-il être implémenté? Dois-je simplement configurer le rappel pour qu'il soit appelé toutes les secondes et vérifier l'heure et démarrer les tâches planifiées pour l'heure ou quoi?


4
node-cron semble être une très bonne option
JtR

var schedule = require ('node-schedule'); ce sont les meilleures choses. à votre santé!!!
Saumyajit le

Réponses:


122

node-cron fait exactement ce que j'ai décrit


4
écrivez-vous les déclarations cronjob dans app.js / scripts.js?
ArVan

ne node-Cron vous permet de modifier les tâches cron système de Node.js? Cela dépend-il du processus de nœud en cours d'exécution? ou vous permettra-t-il d'exécuter des programmes même après la fin de votre processus principal?
Ajar

5
@Ajar non, après la fin du processus nodejs, tous les jobs seront perdus. Il n'y a pas de table cron livrée avec node-cron
Upvote

1
Je suppose que oui @ChrisC. Si je n'utilise aucun framework, je déclare crons in app.js. Dans sails.jsI do it inbootstrap
ArVan

2
@arVan si vous êtes intéressé, j'ai en fait commencé à travailler agendapour ajouter le support de Waterline ici: github.com/mikermcneil/agenda (littéralement juste commencé cependant - devrait avoir des progrès utilisables d'ici la semaine prochaine)
mikermcneil

44

node-schedule Un planificateur de travaux de type cron et non de type cron pour Node.


2
Cela évite la syntaxe crontab parfois déroutante, et est un peu plus lisible à mon avis.
Simon East

comme l'agenda, il semble fournir la persistance 0.1.13
drdrej

5
node-schedule ne fournit pas de persistance. Par la documentation: Note that node-schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes.
Mike Hedman

34

agenda est une planification de travail légère pour le nœud. Cela vous aidera.


1
agenda est basé sur node-cron avec une couche persisten (mongo). donc la réponse ci-dessus est meilleure.
drdrej

51
Pour clarifier, en tant qu'auteur d'agenda, il n'est en fait pas du tout basé sur node-cron ...
Ryan

1
La bibliothèque d'agenda est la seule et unique meilleure bibliothèque car la configuration est simple et l'utilisation est facile pour l'utilisateur. Félicitations @Ryan
Vimalraj Selvam

4
J'ai trouvé agendaun comportement incohérent et je ne conseillerais pas de l'utiliser. Vérifiez les problèmes en suspens et les RP pour passer votre propre appel.
Russbear

2
soyez conscient, l'agenda n'est pas prêt pour la production. Il a des problèmes de fuite de mémoire et vérifie les problèmes. Il y a encore beaucoup de bugs. Cela semble prometteur une fois prêt.
Sebastian

15

later.js est une assez bonne bibliothèque de "planificateur" JavaScript. Peut s'exécuter sur Node.js ou dans un navigateur Web.


3
J'ai essayé quelques-unes des suggestions de ce fil de discussion, mais ce module m'a semblé le plus convivial et le plus simple à utiliser ... merci!
Gene Bo le

12

J'utilise kue: https://github.com/learnboost/kue . C'est plutôt sympa.

Les fonctionnalités officielles et mes commentaires:

  1. emplois retardés.
    • Si vous souhaitez laisser le travail s'exécuter à un moment précis, calculez les millisecondes entre ce moment et maintenant. Appelez job.delay (millisecondes) (Le document dit minutes, ce qui est faux.) N'oubliez pas d'ajouter "jobs.promote ();" lorsque vous lancez des travaux.
  2. événement professionnel et pub de progrès.
    • Je ne comprends pas.
  3. riche interface utilisateur intégrée.
    • Très utile. Vous pouvez vérifier l'état du travail (terminé, en cours d'exécution, retardé) dans l'interface utilisateur intégrée et vous n'avez pas besoin d'écrire de code. Et vous pouvez supprimer les anciens enregistrements dans l'interface utilisateur.
  4. défilé interminable
    • Parfois ne fonctionne pas. Faut se rafraîchir.
  5. Indication de la progression de l'interface utilisateur
    • Bon pour les travaux chronophages.
  6. journalisation spécifique à la tâche
    • Comme il s'agit de travaux retardés, vous devez enregistrer des informations utiles dans le travail et vérifier plus tard via l'interface utilisateur.
  7. propulsé par Redis
    • Très utile. Lorsque vous redémarrez votre application node.js, tous les enregistrements de tâches sont toujours là et les tâches planifiées s'exécuteront également!
  8. tentatives facultatives
    • Agréable.
  9. capacités de recherche en texte intégral
    • Bien.
  10. API JSON RESTful
    • Ça sonne bien, mais je ne l'utilise jamais.

Éditer:

  1. kue n'est pas une bibliothèque de type cron.
  2. Par défaut, kue ne prend pas en charge les travaux qui s'exécutent à plusieurs reprises (par exemple tous les dimanches).

6
Kue est une file d'attente de travaux, pas un planificateur.
Leonid Beschastny

1
@LeonidBeschastny Kue est une file d'attente de travaux. Et c'est aussi un ordonnanceur, car il peut "me laisser programmer une fonction à exécuter à un certain moment".
Vince Yuan

Je pensais que les travaux de Kue ne pouvaient être que retardés, mais pas programmés à une certaine heure.
Leonid Beschastny

@LeonidBeschastny Vous avez raison. Kue ne fournit pas d'API pour planifier un travail à une certaine heure. Mais comme je l'ai mentionné, "Si vous voulez laisser le travail s'exécuter à un moment précis, calculez les millisecondes entre ce moment et maintenant. Appelez job.delay (millisecondes) (Le document dit minutes, ce qui est faux.)" C'est très facile .
Vince Yuan

1
Vous pouvez essayer kue-scheduler, qui est similaire à aganda
Fruch

9

node-crontab vous permet d'éditer les tâches cron système à partir de node.js. L'utilisation de cette bibliothèque vous permettra d'exécuter des programmes même après la fin de votre processus principal. Avertissement: je suis le développeur.


donc il persiste si le serveur de nœuds est réinitialisé?
jonperl


Oui, les emplois sont conservés.
Blago

sa licence GPL, donc non utilisable dans un projet commercial.
drdrej

5
La licence est maintenant MIT
Blago

8

Vous pouvez utiliser timexe

Il est simple à utiliser, léger, n'a pas de dépendances, a une syntaxe améliorée par rapport à cron, avec une résolution en millisecondes et fonctionne dans le navigateur.

Installer:

npm install timexe

Utilisation:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(Je suis l'auteur)


puis-je avoir un exemple pour cela s'il vous plaît?
Alex

1
Veuillez consulter les exemples sur github: github.com/paragi/timexe
Simon Rigét

2

Je suis l'auteur de node-runnr . Il a une approche très simple pour créer des emplois. Il est également très facile et clair de déclarer l'heure et l'intervalle. Par exemple, pour exécuter un travail toutes les 10min 20sec,

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

Pour faire un travail à 10h et 15h tous les jours,

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

C'est si simple. Pour plus de détails: https://github.com/Saquib764/node-runnr




0

Cela ne conviendra pas à tout le monde, mais si votre application est déjà configurée pour prendre des commandes via une socket, vous pouvez utiliser netcat pour émettre des commandes via cron proprement dit.

echo 'mycommand' | nc -U /tmp/myapp.sock
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.