Cron ist ein robustes Tool zum Ausführen von Jobs (Funktionen oder Befehlen) nach Zeitplänen, die mithilfe der Cron-Syntax definiert sind.
Perfekt für Aufgaben wie Datensicherungen, Benachrichtigungen und vieles mehr!
Führen Sie eine Funktion aus, wenn Ihr geplanter Job ausgelöst wird
Führen Sie mithilfe von child_process
einen Job außerhalb des Javascript-Prozesses aus (z. B. einen Systembefehl).
Verwenden Sie ein Date- oder Luxon-DateTime-Objekt anstelle der Cron-Syntax als Auslöser für Ihren Rückruf
Verwenden Sie für Sekunden einen zusätzlichen Steckplatz (wenn Sie ihn ausgeschaltet lassen, wird der Standardwert auf 0 gesetzt und entspricht dem Unix-Verhalten).
npm cron installieren
Merkmale
Installation
Migration von v2 auf v3
Grundlegende Verwendung
Cron-Muster
Übersicht über die Cron-Syntax
Unterstützte Bereiche
Fallstricke
API
Standalone-Funktionen
CronJob-Klasse
CronTime-Klasse
Gemeinschaft
Treten Sie der Community bei
Mitwirken
Allgemeiner Beitrag
Einreichen von Fehlern/Problemen
Danksagungen
Lizenz
Mit der Einführung von TypeScript in Version 3 und der Angleichung an UNIX-Cron-Muster wurden einige Änderungen vorgenommen:
Monatsindizierung: Von 0-11
auf 1-12
geändert. Sie müssen also alle numerischen Monate um 1 erhöhen.
Indexierung nach Wochentagen: Unterstützung für 7
als Sonntag hinzugefügt.
CronJob
Der Konstruktor akzeptiert ein Objekt nicht mehr als seinen ersten und einzigen Parameter. Verwenden Sie stattdessen CronJob.from(argsObject)
.
Rückrufe werden nun in der Reihenfolge aufgerufen, in der sie registriert wurden.
nextDates(count?: number)
gibt jetzt immer ein Array zurück (leer, wenn kein Argument angegeben wird). Verwenden Sie stattdessen nextDate()
für ein einzelnes Datum.
Die Methode job()
wurde zugunsten des new CronJob(...args)
/ CronJob.from(argsObject)
entfernt.
time()
-Methode zugunsten der new CronTime()
entfernt
import { CronJob } from 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('Diese Meldung wird jede Sekunde angezeigt');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() ist hier optional, da der vierte Parameter auf true gesetzt ist.
// Äquivalenter Job, der die statische Methode „from“ verwendet und Parameter als Objekt bereitstelltconst job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('Sie werden dies sehen Nachricht jede Sekunde');},start: true,timeZone: 'America/Los_Angeles'});
Hinweis: Im ersten Beispiel oben startet der vierte Parameter von
CronJob()
den Job automatisch. Wenn nicht angegeben oder auf „falsy“ gesetzt, müssen Sie den Job explizit mitjob.start()
starten.
Weitere Beispiele für Fortgeschrittene finden Sie im Beispielverzeichnis.
Cron-Muster sind das Rückgrat dieser Bibliothek. Machen Sie sich mit der Syntax vertraut:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
Detaillierte Muster und Erklärungen finden Sie unter crontab.org. Die Beispiele im Link haben fünf Felder und 1 Minute als feinste Granularität, aber unsere Cron-Planung unterstützt ein erweitertes Format mit sechs Feldern, was eine Präzision der zweiten Ebene ermöglicht. Tools wie crontab.guru können bei der Erstellung von Mustern hilfreich sein, aber denken Sie daran, das Sekundenfeld zu berücksichtigen.
Hier ist eine kurze Referenz zum UNIX-Cron-Format, das diese Bibliothek verwendet, sowie ein hinzugefügtes zweites Feld:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
Für die Felder „Monat“ und „Wochentag“ können auch Namen verwendet werden. Verwenden Sie die ersten drei Buchstaben des jeweiligen Tages oder Monats (Groß- und Kleinschreibung spielt keine Rolle). Bereiche und Listen von Namen sind zulässig.
Beispiele: „Mo, Mi, Fr“, „Jan-März“.
Sowohl JS Date
als auch Luxon DateTime
Objekte garantieren aufgrund von Berechnungsverzögerungen keine Genauigkeit im Millisekundenbereich. Dieses Modul schließt die Millisekundengenauigkeit für die Standard-Cron-Syntax aus, ermöglicht jedoch die Angabe des Ausführungsdatums über JS Date
oder Luxon DateTime
Objekte. Aufgrund dieser Berechnungsverzögerungen funktioniert die Angabe einer genauen zukünftigen Ausführungszeit, z. B. das Hinzufügen einer Millisekunde zur aktuellen Zeit, jedoch möglicherweise nicht immer. Es wurde beobachtet, dass Verzögerungen von weniger als 4–5 ms zu Inkonsistenzen führen können. Während wir die gesamte Datumsgranularität auf Sekunden beschränken könnten, haben wir uns dafür entschieden, eine größere Präzision zu ermöglichen, Benutzer jedoch auf mögliche Probleme hinzuweisen.
Durch die Verwendung von Pfeilfunktionen für onTick
werden diese an den this
Kontext des übergeordneten Elements gebunden. Daher haben sie keinen Zugriff auf this
Kontext des Cronjobs. Mehr dazu könnt ihr in Ausgabe Nr. 47 (Kommentar) nachlesen.
sendAt
: Gibt an, wann ein CronTime
ausgeführt wird (gibt ein Luxon DateTime
Objekt zurück).
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`Der Job würde ausgeführt werden unter: ${dt.toISO()}`);
timeout
: Gibt die Anzahl der Millisekunden in der Zukunft an, nach denen ein CronTime
ausgeführt wird (gibt eine Zahl zurück).
import * as cron from 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`Der Job würde in ${timeout}ms ausgeführt werden`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
: [ERFORDERLICH] – Die Zeit, um Ihren Job zu entlassen. Kann eine Cron-Syntax, ein JS- Date
-Objekt oder ein Luxon- DateTime
Objekt sein.
onTick
: [ERFORDERLICH] – Funktion, die zum angegebenen Zeitpunkt ausgeführt werden soll. Wenn ein onComplete
Rückruf bereitgestellt wurde, erhält onTick
diesen als Argument.
onComplete
: [OPTIONAL] – Wird aufgerufen, wenn der Job mit job.stop()
angehalten wird. Es könnte auch durch onTick
nach seinem Lauf ausgelöst werden.
start
: [OPTIONAL] – Legt fest, ob der Job vor dem Beenden des Konstruktors beginnen soll. Der Standardwert ist false
.
timeZone
: [OPTIONAL] – Legt die Ausführungszeitzone fest. Standard ist die Ortszeit. Überprüfen Sie die gültigen Formate in der Luxon-Dokumentation.
context
: [OPTIONAL] – Ausführungskontext für die onTick-Methode.
runOnInit
: [OPTIONAL] – Löst sofort die onTick
-Funktion nach der Initialisierung aus. Der Standardwert ist false
.
utcOffset
: [OPTIONAL] – Gibt den Zeitzonenversatz in Minuten an. Kann nicht mit timeZone
koexistieren.
unrefTimeout
: [OPTIONAL] – Nützlich zur Steuerung des Verhaltens der Ereignisschleife. Weitere Details hier.
from
(statisch): Erstellen Sie ein neues CronJob-Objekt, das Argumente als Objekt bereitstellt. Siehe Argumentnamen und Beschreibungen oben.
start
: Initiiert den Job.
stop
: Hält den Job an.
setTime
: Ändert die Zeit für den CronJob
. Der Parameter muss eine CronTime
sein.
lastDate
: Gibt das letzte Ausführungsdatum an.
nextDate
: Gibt das nächste Datum an, an dem ein onTick
aktiviert wird.
nextDates(count)
: Liefert ein Array bevorstehender Daten, die einen onTick
auslösen.
fireOnTick
: Ermöglicht die Änderung des onTick
-Aufrufverhaltens.
addCallback
: Ermöglicht das Hinzufügen von onTick
-Rückrufen.
constructor(time, zone, utcOffset)
:
time
: [ERFORDERLICH] – Die Zeit, zu der Sie mit Ihrem Job beginnen. Akzeptiert Cron-Syntax oder ein JS-Datumsobjekt.
zone
: [OPTIONAL] – Entspricht timeZone
aus CronJob
Parametern.
utcOffset
: [OPTIONAL] – Analog zu utcOffset
aus CronJob
Parametern.
Treten Sie dem Discord-Server bei! Hier können Sie in einem lockereren Forum als GitHub Probleme diskutieren und Hilfe erhalten.
Dieses Projekt sucht Hilfe! Wenn Sie daran interessiert sind, bei dem Projekt mitzuhelfen, werfen Sie bitte einen Blick auf unsere beitragende Dokumentation.
Bitte werfen Sie einen Blick auf unsere beitragende Dokumentation. Sie enthält alle Informationen, die Sie wissen müssen, bevor Sie ein Problem einreichen.
Dies ist ein Gemeinschaftsprojekt. Im wahrsten Sinne des Wortes begann dieses Projekt als Open-Source-Projekt von cron.js und entwickelte sich zu etwas anderem. Andere Personen haben Code, Zeit und Aufsicht zum Projekt beigetragen. An dieser Stelle sind es zu viele, um sie alle zu nennen, also sagen wir einfach Danke.
Besonderer Dank geht an Hiroki Horiuchi, Lundarl Gholoi und koooge für ihre Arbeit an den DefinitelyTyped-Typisierungen, bevor sie in Version 2.4.0 importiert wurden.
MIT