cron est un outil robuste pour exécuter des tâches (fonctions ou commandes) selon des plannings définis à l'aide de la syntaxe cron.
Parfait pour des tâches telles que les sauvegardes de données, les notifications et bien d'autres encore !
exécuter une fonction chaque fois que votre tâche planifiée se déclenche
exécuter un travail externe au processus javascript (comme une commande système) en utilisant child_process
utilisez un objet Date ou Luxon DateTime au lieu de la syntaxe cron comme déclencheur de votre rappel
utilisez un emplacement supplémentaire pendant quelques secondes (le laisser désactivé sera par défaut à 0 et correspondra au comportement Unix)
npm installer cron
Caractéristiques
Installation
Migration de la v2 vers la v3
Utilisation de base
Modèles Cron
Présentation de la syntaxe Cron
Plages prises en charge
Des pièges
API
Fonctions autonomes
Classe CronJob
Classe CronTime
Communauté
Rejoignez la communauté
Contribuer
Cotisation générale
Soumettre des bogues/problèmes
Remerciements
Licence
Avec l'introduction de TypeScript dans la version 3 et l'alignement sur les modèles cron UNIX, quelques modifications ont été apportées :
Indexation mensuelle : passée de 0-11
à 1-12
. Vous devez donc incrémenter tous les mois numériques de 1.
Indexation du jour de la semaine : prise en charge ajoutée pour 7
comme dimanche.
CronJob
Le constructeur n'accepte plus un objet comme premier et unique paramètre. Utilisez plutôt CronJob.from(argsObject)
.
Les rappels sont désormais appelés dans l’ordre dans lequel ils ont été enregistrés.
nextDates(count?: number)
renvoie désormais toujours un tableau (vide si aucun argument n'est fourni). Utilisez plutôt nextDate()
pour une seule date.
méthode job()
supprimée au profit du new CronJob(...args)
/ CronJob.from(argsObject)
méthode time()
supprimée au profit du new CronTime()
import { CronJob } from 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('Vous verrez ce message toutes les secondes');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() est facultatif ici en raison du quatrième paramètre défini sur true.
// travail équivalent utilisant la méthode statique "from", fournissant des paramètres sous forme d'objetconst job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('Vous verrez ceci message toutes les secondes');},start: true,timeZone: 'America/Los_Angeles'});
Remarque : dans le premier exemple ci-dessus, le quatrième paramètre de
CronJob()
démarre automatiquement le travail. S'il n'est pas fourni ou défini sur falsy, vous devez explicitement démarrer le travail en utilisantjob.start()
.
Pour des exemples plus avancés, consultez le répertoire des exemples.
Les modèles Cron sont l'épine dorsale de cette bibliothèque. Familiarisez-vous avec la syntaxe :
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
Des modèles et des explications détaillés sont disponibles sur crontab.org. Les exemples dans le lien comportent cinq champs et 1 minute comme granularité la plus fine, mais notre planification cron prend en charge un format amélioré avec six champs, permettant une précision de deuxième niveau. Des outils comme crontab.guru peuvent aider à créer des modèles, mais n'oubliez pas de prendre en compte le champ des secondes.
Voici une référence rapide au format UNIX Cron utilisé par cette bibliothèque, plus un deuxième champ ajouté :
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)
Les noms peuvent également être utilisés pour les champs « mois » et « jour de la semaine ». Utilisez les trois premières lettres du jour ou du mois en question (la casse n'a pas d'importance). Les plages et les listes de noms sont autorisées.
Exemples : "lundi, mercredi, vendredi", "janvier-mars".
Les objets JS Date
et Luxon DateTime
ne garantissent pas une précision à la milliseconde en raison des retards de calcul. Ce module exclut la précision à la milliseconde pour la syntaxe cron standard mais permet la spécification de la date d'exécution via les objets JS Date
ou Luxon DateTime
. Cependant, spécifier une heure d'exécution future précise, comme ajouter une milliseconde à l'heure actuelle, peut ne pas toujours fonctionner en raison de ces retards de calcul. Il a été observé que des retards inférieurs à 4 à 5 ms peuvent entraîner des incohérences. Bien que nous puissions limiter la granularité des dates à quelques secondes, nous avons choisi d'autoriser une plus grande précision tout en informant les utilisateurs des problèmes potentiels.
L'utilisation de fonctions fléchées pour onTick
les lie au contexte this
du parent. Par conséquent, ils n’auront pas accès au this
de la tâche cron. Vous pouvez en lire un peu plus dans le numéro 47 (commentaire).
sendAt
: Indique quand un CronTime
s'exécutera (renvoie un objet Luxon DateTime
).
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`Le travail s'exécuterait à : ${dt.toISO()}`);
timeout
: indique le nombre de millisecondes dans le futur après lequel un CronTime
s'exécutera (renvoie un nombre).
importer * comme cron depuis 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`Le travail s'exécuterait dans ${timeout}ms`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
: [REQUIS] - L'heure de lancer votre travail. Peut être une syntaxe cron, un objet JS Date
ou un objet Luxon DateTime
.
onTick
: [REQUIRED] - Fonction à exécuter à l'heure spécifiée. Si un rappel onComplete
a été fourni, onTick
le recevra comme argument.
onComplete
: [OPTIONNEL] - Invoqué lorsque le travail est arrêté avec job.stop()
. Il peut également être déclenché par onTick
après son exécution.
start
: [OPTIONNEL] - Détermine si le travail doit commencer avant la sortie du constructeur. La valeur par défaut est false
.
timeZone
: [OPTIONNEL] - Définit le fuseau horaire d'exécution. La valeur par défaut est l'heure locale. Vérifiez les formats valides dans la documentation Luxon.
context
: [OPTIONNEL] - Contexte d'exécution pour la méthode onTick.
runOnInit
: [OPTIONNEL] - Déclenche instantanément la fonction onTick
après l'initialisation. La valeur par défaut est false
.
utcOffset
: [OPTIONNEL] - Spécifie le décalage horaire en minutes. Ne peut pas coexister avec timeZone
.
unrefTimeout
: [OPTIONNEL] - Utile pour contrôler le comportement de la boucle d'événements. Plus de détails ici.
from
(static) : créez un nouvel objet CronJob fournissant des arguments en tant qu'objet. Voir les noms et descriptions des arguments ci-dessus.
start
: lance le travail.
stop
: arrête le travail.
setTime
: Modifie l'heure du CronJob
. Le paramètre doit être un CronTime
.
lastDate
: Fournit la date de la dernière exécution.
nextDate
: Indique la date ultérieure qui activera un onTick
.
nextDates(count)
: Fournit un tableau de dates à venir qui lanceront un onTick
.
fireOnTick
: Permet de modifier le comportement d'appel onTick
.
addCallback
: Permet l'ajout de rappels onTick
.
constructor(time, zone, utcOffset)
:
time
: [REQUIS] - L'heure de lancement de votre travail. Accepte la syntaxe cron ou un objet JS Date.
zone
: [OPTIONNEL] - Équivalent à timeZone
des paramètres CronJob
.
utcOffset
: [OPTIONNEL] - Analogue à utcOffset
des paramètres CronJob
.
Rejoignez le serveur Discord ! Ici, vous pouvez discuter des problèmes et obtenir de l'aide dans un forum plus informel que GitHub.
Ce projet recherche de l'aide ! Si vous souhaitez contribuer au projet, veuillez consulter notre documentation de contribution.
Veuillez consulter notre documentation de contribution, elle contient toutes les informations que vous devez connaître avant de soumettre un problème.
Il s’agit d’un projet d’effort communautaire. Dans le vrai sens du terme, ce projet a commencé comme un projet open source de cron.js et est devenu autre chose. D'autres personnes ont contribué au code, au temps et à la supervision du projet. À ce stade, il y en a trop pour les nommer ici, nous allons donc simplement les remercier.
Un merci spécial à Hiroki Horiuchi, Lundarl Gholoi et koooge pour leur travail sur les typages DefinitelyTyped avant leur importation dans la v2.4.0.
MIT