Gibt es eine Job Scheduler-Bibliothek für node.js? [geschlossen]

155

Gibt es eine Cron-ähnliche Bibliothek, mit der ich festlegen kann, dass eine Funktion zu einem bestimmten Zeitpunkt ausgeführt wird (z. B. 15:30 Uhr, nicht in x Stunden usw.)? Wenn es diese Art von Bibliothek nicht gibt, wie sollte dies implementiert werden? Sollte ich einfach den Rückruf so einstellen, dass er jede Sekunde aufgerufen wird, die Uhrzeit überprüfen und Jobs starten, die für die Uhrzeit geplant sind, oder was?

JtR
quelle
4
Node-Cron scheint eine sehr gute Option zu sein
JtR
var Schedule = erfordern ('Node-Schedule'); ist das Beste. Prost!!!
Saumyajit

Antworten:

122

Node-Cron macht genau das, was ich beschrieben habe

JtR
quelle
4
Schreiben Sie die Cronjob-Deklarationen in app.js / scripts.js?
ArVan
hat Knoten-Cron Sie von node.js zu bearbeiten System Cronjobs ermöglichen? Ist es abhängig vom laufenden Knotenprozess? oder können Sie Programme auch nach Beendigung Ihres Hauptprozesses ausführen?
Ajar
5
@ Ajar Nein, nach Beendigung des NodeJS-Prozesses gehen alle Jobs verloren. Es gibt keine Cron-Tabelle mit Node-Cron ausgeliefert
Upvote
1
Ich denke schon @ChrisC. Wenn ich kein Framework verwende, deklariere ich Cron in app.js. In sails.jsIch mache es inbootstrap
ArVan
2
@arVan, wenn Sie interessiert sind, habe ich tatsächlich begonnen, agendahier Waterline-Unterstützung hinzuzufügen: github.com/mikermcneil/agenda (buchstäblich erst begonnen - sollte bis nächste Woche einige brauchbare Fortschritte haben)
mikermcneil
44

Knoten-Zeitplan Ein Cron-ähnlicher und nicht-Cron-ähnlicher Job-Scheduler für Node.

Unitech
quelle
2
Dies schafft es, die manchmal verwirrende Crontab-Syntax zu vermeiden und ist meiner Meinung nach etwas besser lesbar.
Simon East
wie Agenda scheint es, um Ausdauer zu bieten 0.1.13
drdrej
5
Der Knotenplan bietet keine Persistenz. Gemäß den Dokumenten: 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 ist eine Lightweight-Jobplanung für Knoten. Das wird dir helfen.

Fizer Khan
quelle
1
Die Agenda basiert auf Node-Cron mit einer Persisten-Schicht (Mongo). Die obige Antwort ist also besser.
Drdrej
51
Zur Verdeutlichung, als Autor der Tagesordnung, basiert es eigentlich überhaupt nicht auf Node-Cron ...
Ryan
1
Die Agenda-Bibliothek ist die einzige beste Bibliothek, da die Einrichtung einfach und die Verwendung für den Benutzer einfach ist. Kudos @ Ryan
Vimalraj Selvam
4
Ich habe agendaein inkonsistentes Verhalten festgestellt und würde nicht raten, es zu verwenden. Überprüfen Sie die offenen Probleme und PRs, um Ihren eigenen Anruf zu tätigen.
Russbear
2
Beachten Sie, dass die Agenda nicht produktionsbereit ist. Es gibt Probleme mit Speicherverlusten und es wird nach Problemen gesucht. Hat immer noch viele Fehler. Es sieht vielversprechend aus, wenn es fertig ist.
Sebastian
15

later.js ist eine ziemlich gute JavaScript "Scheduler" -Bibliothek. Kann auf Node.js oder in einem Webbrowser ausgeführt werden.

XåpplI'-I0llwlg'I -
quelle
3
Ich habe einige der Vorschläge in diesem Thread ausprobiert, aber dieses Modul erwies sich als das benutzerfreundlichste und direkteste, mit dem ich arbeiten konnte. Danke!
Gene Bo
12

Ich verwende kue: https://github.com/learnboost/kue . Es ist ziemlich schön.

Die offiziellen Features und meine Kommentare:

  1. verspätete Jobs.
    • Wenn Sie den Job zu einem bestimmten Zeitpunkt ausführen lassen möchten, berechnen Sie die Millisekunden zwischen diesem Zeitpunkt und jetzt. Rufen Sie job.delay (Millisekunden) auf (Das Dokument sagt Minuten, was falsch ist.) Vergessen Sie nicht, "jobs.promote ();" wenn Sie Jobs initiieren.
  2. Job Event und Fortschritt Pubsub.
    • Ich verstehe es nicht
  3. reichhaltige integrierte Benutzeroberfläche.
    • Sehr hilfreich. Sie können den Auftragsstatus (erledigt, ausgeführt, verzögert) in der integrierten Benutzeroberfläche überprüfen und müssen keinen Code schreiben. Und Sie können alte Datensätze in der Benutzeroberfläche löschen.
  4. unendliches Scrollen
    • Manchmal funktioniert es nicht. Müssen auffrischen.
  5. Anzeige des UI-Fortschritts
    • Gut für zeitaufwändige Jobs.
  6. Auftragsspezifische Protokollierung
    • Da es sich um verzögerte Jobs handelt, sollten Sie nützliche Informationen im Job protokollieren und später über die Benutzeroberfläche überprüfen.
  7. powered by Redis
    • Sehr hilfreich. Wenn Sie Ihre node.js-App neu starten, sind alle Jobdatensätze noch vorhanden und die geplanten Jobs werden ebenfalls ausgeführt!
  8. optionale Wiederholungsversuche
    • Nett.
  9. Volltextsuchfunktionen
    • Gut.
  10. RESTful JSON API
    • Hört sich gut an, aber ich benutze es nie.

Bearbeiten:

  1. Kue ist keine Cron-ähnliche Bibliothek.
  2. Standardmäßig unterstützt kue keinen Job, der wiederholt ausgeführt wird (z. B. jeden Sonntag).
Vince Yuan
quelle
6
Kue ist eine Jobwarteschlange, kein Scheduler.
Leonid Beschastny
1
@LeonidBeschastny Kue ist eine Jobwarteschlange. Und es ist auch ein Scheduler, weil es "mich eine Funktion planen lässt, die zu einer bestimmten Zeit ausgeführt wird".
Vince Yuan
Ich dachte, Kue-Jobs können nur verzögert, aber nicht zu einer bestimmten Zeit geplant werden.
Leonid Beschastny
@LeonidBeschastny Du hast recht. Kue bietet keine API, um einen Job zu einer bestimmten Zeit zu planen. Aber wie bereits erwähnt: "Wenn Sie den Job zu einem bestimmten Zeitpunkt ausführen möchten, berechnen Sie die Millisekunden zwischen diesem Zeitpunkt und jetzt. Rufen Sie job.delay (Millisekunden) auf (Das Dokument sagt Minuten, was falsch ist.)" Es ist sehr einfach .
Vince Yuan
1
Sie könnten versuchen, Kue-Scheduler, die ähnlich wie Aganda
Fruch
9

Mit node-crontab können Sie System-Cron-Jobs aus node.js bearbeiten. Mit dieser Bibliothek können Sie Programme auch nach Ablauf Ihrer Hauptprozesszeiten ausführen. Haftungsausschluss: Ich bin der Entwickler.

Blago
quelle
Also bleibt es bestehen, wenn der Knotenserver zurückgesetzt wird?
Jonperl
Ja, Jobs bleiben bestehen.
Blago
Die GPL ist lizenziert und daher nicht für kommerzielle Projekte geeignet.
Drdrej
5
Die Lizenz ist jetzt MIT
Blago
8

Sie können timexe verwenden

Es ist einfach zu bedienen, leicht, hat keine Abhängigkeiten, eine verbesserte Syntax gegenüber Cron, eine Auflösung in Millisekunden und funktioniert im Browser.

Installieren:

npm install timexe

Verwenden:

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

(Ich bin der Autor)

Simon Rigét
quelle
Darf ich bitte ein Beispiel dafür bekommen?
Alex
1
Bitte werfen Sie einen Blick auf die Beispiele auf Github: github.com/paragi/timexe
Simon Rigét
2

Ich bin der Autor von Node-Runnr . Es ist sehr einfach, Arbeitsplätze zu schaffen. Es ist auch sehr einfach und klar, Zeit und Intervall zu deklarieren. Um beispielsweise alle 10 Minuten und 20 Sekunden einen Job auszuführen,

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

Täglich um 10 und 15 Uhr einen Job machen,

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

So einfach ist das. Für weitere Details: https://github.com/Saquib764/node-runnr

codedemon
quelle
1

Sowohl Node-Schedule als auch Node-Cron können verwendet werden, um Cron-basierte Scheduler zu implementieren.

HINWEIS : Zum Generieren von Cron-Ausdrücken können Sie diesen cron_maker verwenden

dush88c
quelle
0

Dies ist nicht für alle geeignet. Wenn Ihre Anwendung jedoch bereits so eingerichtet ist, dass Befehle über einen Socket entgegengenommen werden, können Sie mit netcat Befehle über cron richtig ausgeben.

echo 'mycommand' | nc -U /tmp/myapp.sock
Adria
quelle