Ein Null-Abhängigkeits-Cron-Parser und Scheduler für Node.js, Deno und den Browser. Veröffentlicht auf NPM und JSR
Via npm:
$ npm install cron-schedule
Via Garn:
$ yarn add cron-schedule
Via PNPM:
$ pnpm add cron-schedule
Wir testen unseren Code gegen die folgenden Node.js -Veröffentlichungen ( 18.20
, 20.12
). Andere Versionen von Node.js können ebenfalls funktionieren, dies wird jedoch nicht getestet.
import { parseCronExpression } from 'cron-schedule'
const cron = parseCronExpression ( '*/5 * * * *' )
console . log ( cron . getNextDate ( new Date ( 2020 , 10 , 20 , 18 , 32 ) ) )
// 2020-11-20T17:35:00.000Z
< script type =" module " >
import { parseCronExpression } from 'https://cdn.skypack.dev/cron-schedule@:version'
const cron = parseCronExpression ( '*/5 * * * *' )
console . log ( cron . getNextDate ( new Date ( 2020 , 10 , 20 , 18 , 32 ) ) )
// 2020-11-20T17:35:00.000Z
</ script >
In den obigen Beispielen wird Skypack verwendet.
import { parseCronExpression } from 'npm:cron-schedule@:version'
const cron = parseCronExpression ( '*/5 * * * *' )
console . log ( cron . getNextDate ( new Date ( 2020 , 10 , 20 , 18 , 32 ) ) )
// 2020-11-20T17:35:00.000Z
Alternativ können Sie deno add @p4sca1/cron-schedule
und von @p4sca1/cron-schedule
oder importieren oder von jsr:@p4sca1/cron-schedule
ohne Installationsschritt importieren.
Die CDN -URLs von Deno Import und Skypack enthalten einen :version
. Ersetzen :version
durch die gewünschte Version. Semver -Bereiche werden unterstützt. Verwenden Sie immer die neueste 4.x
-Version verwenden ^4.0.0
. In https://www.npmjs.com/package/cron-schedule finden Sie eine Liste der verfügbaren Versionen.
// Import method to parse a cron expression.
import { parseCronExpression } from 'cron-schedule'
// Parse a cron expression to return a Cron instance.
const cron = parseCronExpression ( '*/5 * * * *' )
// Get the next date starting from the given start date or now.
cron . getNextDate ( startDate ?: Date ) : Date
// Get the specified amount of future dates starting from the given start date or now.
cron . getNextDates ( amount : number , startDate ?: Date ) : Date [ ]
// Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.
// The iterator runs until the optional endDate is reached or forever.
// The advantage of an iterator is that you can get more further dates on demand by using iterator.next().
cron . getNextDatesIterator ( startDate : Date = new Date ( ) , endDate ?: Date ) : Generator < Date , undefined , undefined >
// Get the previou date starting from the given start date or now.
cron . getPrevDate ( startDate : Date = new Date ( ) ) : Date
// Get the specified amount of previous dates starting from the given start date or now.
cron . getPrevDates ( amount : number , startDate ?: Date ) : Date [ ]
// Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.
// The iterator runs until the optional endDate is reached or forever.
// The advantage of an iterator is that you can get more previous dates on demand by using iterator.next().
cron . getPrevDatesIterator ( startDate : Date = new Date ( ) , endDate ?: Date ) : Generator < Date , undefined , undefined >
// Check whether there is a cron date at the given date.
cron . matchDate ( date : Date ) : boolean
Sie können Aufgaben planen, die auf der Grundlage eines Cron -Ausdrucks ausgeführt werden sollen. Die Cron-Schedule wird mit 2 verschiedenen Schedulern geliefert.
Wenn Sie TypeScript verwenden, stellen Sie sicher, dass Sie compilerOptions.moduleResolution
auf node16
oder nodenext
festlegen.
Der Timer -basierte Cron Scheduler erstellt einen Timer für jeden geplanten Cron. Wenn das Knoten -Zeitlimit -Grenzwert von ~ 24 Tagen überschritten wird, wird mehrere aufeinanderfolgende Zeitüberschreitungen verwendet.
// Import the scheduler.
import { TimerBasedCronScheduler as scheduler } from 'cron-schedule/schedulers/timer-based.js'
// Create a timeout, which fill fire the task on the next cron date.
// An optional errorHandler can be provided, which is called when the task throws an error or returns a promise that gets rejected.
// Returns a handle which can be used to clear the timeout using clearTimeoutOrInterval.
scheduler . setTimeout ( cron : Cron , task : ( ) = > unknown , opts ?: { errorHandler ?: ( err : Error ) = > unknown } ) : ITimerHandle
// Create an interval, which will fire the given task on every future cron date.
// This uses consecutive calls to scheduler.setTimeout under the hood.
// An optional errorHandler can be provided, which is called when the task throws an error or returns a promise that gets rejected.
// The task remains scheduled when an error occurs.
// Returns a handle which can be used to clear the timeout using clearTimeoutOrInterval.
scheduler . setInterval ( cron : Cron , task : ( ) = > unknown , opts ?: { errorHandler ?: ( err : Error ) = > unknown } ) : ITimerHandle
// Clear a timeout or interval, making sure that the task will no longer execute.
scheduler . clearTimeoutOrInterval ( handle : ITimerHandle ) : void
Profis:
Nachteile:
Die Intervallbasis prüft Scheduler in einem festen Intervall. Es gibt also nur ein Intervall für alle Aufgaben, die einem Scheduler zugeordnet sind. Sie können mehrere Instanzen eines intervallbasierten Zeitplaners haben.
// Import the scheduler.
import { IntervalBasedCronScheduler } from 'cron-schedule/schedulers/interval-based.js'
// Instantiate a new instance of the scheduler with the given interval. In this example, the scheduler would check every 60 seconds.
const scheduler = new IntervalBasedCronScheduler ( 60 * 1000 )
// Register a new task that will be executed on every future cron date, or only on the next cron date if isOneTimeTask is true.
// An optional errorHandler can be provided, which is called when the task throws an error or returns a promise that gets rejected.
// The task remains scheduled when an error occurs (if not a one time task). Tasks are at max executed only once per interval.
// Returns an id to be used with unregisterTask.
scheduler . registerTask ( cron : Cron , task : ( ) = > unknown , opts ?: { isOneTimeTask ?: boolean , errorHandler ?: ( err : Error ) = > unknown } ) : number
// Unregister a task causing it to no longer be executed.
scheduler . unregisterTask ( id : number ) : void
// You can stop the scheduler, which clears the interval.
scheduler . stop ( )
// You can start the scheduler after stopping it again. A newly created scheduler is started by default.
// Tasks that were due while the scheduler was stopped will be executed on the next interval tick (but only a single time).
scheduler . start ( )
Profis:
Nachteile:
Für die meisten Personen sollte der Timer -basierte Scheduler eine gute Option sein. SetTimeout kann jedoch für lange Verzögerungen unzuverlässig sein. Wenn Sie Probleme mit langer Zeitpunkten / Intervallen haben oder aufgrund vieler geplanter Aufgaben Leistungsprobleme haben, sollten Sie den intervallbasierten Zeitplaner berücksichtigen.
Cron_Schedule verwendet die Linux -Cron -Syntax, wie hier beschrieben, mit der Zugabe, dass Sie optional Sekunden angeben können, indem Sie das Minute -Feld mit einem anderen Feld vorbereiten.
┌───────────── second (0 - 59, optional)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12)
│ │ │ │ │ ┌───────────── weekday (0 - 7)
* * * * * *
Alle Linux -Cron -Funktionen werden unterstützt, einschließlich
Für einfache Zeitaufgaben wie alle x Sekunden sollten Sie in Betracht ziehen, setInterval
zu verwenden, der besser für einfache Timing -Aufgaben geeignet ist, da sie nicht über den Berechnungspunkt verfügt.
Suchen Sie nach einer Möglichkeit, Cron -Ausdrücke in Ihrem Backend (Node.js) oder im Browser mit Unterstützung für mehrere Voreinstellungen zu validieren? Schauen Sie sich Cron-Validate an!
Verwenden Sie das npm-cron-schedule
Preset, um zu bestätigen, dass Cron-Ausdrücke von Cron-Schedule unterstützt werden.