Aller au contenu

Syntaxe des expressions cron

Une expression cron est cinq champs qui décrivent quand quelque chose doit s'exécuter. Chaque champ indique quelles valeurs de son unité sont acceptables, et la tâche s'exécute à chaque minute où les cinq sont d'accord. C'est tout le modèle : pas de notion de durée, pas d'« tous les 90 minutes », et pas d'état du prochain démarrage stocké nulle part.

Les champs se lisent de gauche à droite comme minute, heure, jour du mois, mois, jour de la semaine. Les exemples en bas sont ceux que les gens recherchent vraiment, et chacun d'eux passe par l'analyseur cron du site lui-même avant que cette page soit construite.

La dernière section liste la syntaxe qui ressemble à cron mais n'est pas acceptée ici : les extensions Quartz et Jenkins, et la forme à six champs avec les secondes. Elles valent le coup de reconnaître, car une expression copiée qui en utilise une va simplement échouer.

Les cinq champs

7

Une ligne cron est cinq champs séparés par des espaces, puis la commande. Chaque champ doit être présent ; il n'y a pas de moyen d'en omettre un.

ExpressionPlageSens
* * * * *min hod dom mes dowLes cinq champs en ordre : minute, heure, jour du mois, mois, jour de la semaineCinq astérisques signifient chaque minute de chaque jour — l'expression la plus lâche.
minute0-59Premier champ
hour0-23Deuxième champ, sur une horloge 24 heures
day of month1-31Troisième champUn jour qui n'existe pas dans un mois donné est simplement ignoré — 31 s'exécute sept fois par an, pas douze.
month1-12Quatrième champ
day of week0-7Cinquième champ, dimanche en premier0 et 7 signifient tous les deux dimanche, c'est pourquoi la plage va jusqu'à sept plutôt que six.
0 5 13 * 5Quand les deux champs jour sont limités, cron s'exécute sur l'un ou l'autre — pas sur les deuxCeci s'exécute le 13 et tous les vendredis, donc ce n'est pas « vendredi 13 ». C'est la seule règle cron qui surprend tout le monde.

Opérateurs

10

Les quatre mêmes opérateurs fonctionnent dans chaque champ ; seules les nombres qu'ils acceptent changent.

ExpressionPlageSens
*Chaque valeur que le champ autorise
1,15,30Une liste de valeurs individuelles
9-17Une plage inclusive
*/15Chaque nème valeur dans tout le champ*/15 dans le champ des minutes signifie :00, :15, :30 et :45 — comptage depuis le bas de la plage, pas depuis maintenant.
9-17/2Chaque nème valeur dans une plage
5/10Chaque nème valeur à partir d'un point de départ jusqu'à la fin du champ
0,30 9-17 * * 1-5Les opérateurs se combinent librement dans n'importe quel champToutes les demi-heures, entre neuf et dix-sept, du lundi au vendredi.
JAN-DEC1-12Noms de mois, trois lettres, insensible à la casse
SUN-SAT0-6Noms de jours, trois lettres, insensible à la casse
70Dimanche, écrit l'autre façon

Macros de raccourci

7

Sept noms qui représentent une expression entière. Ils sont une commodité du format crontab plutôt que de la grammaire des champs, donc un planificateur qui lit les chaînes cron ne les accepte pas nécessairement.

ExpressionPlageSens
@hourly0 * * * *Au sommet de chaque heure
@daily0 0 * * *Une fois par jour à minuit
@midnight0 0 * * *La même chose que @daily
@weekly0 0 * * 0Une fois par semaine, dimanche à minuit
@monthly0 0 1 * *Le premier du mois à minuit
@yearly0 0 1 1 *Le premier janvier à minuit
@annually0 0 1 1 *La même chose que @yearly

Exemples travaillés

14

Lisez-en un de droite à gauche quand ça cesse d'avoir du sens : le champ le plus brut est à droite, et il décide quels jours les plus fins sont même consultés.

ExpressionPlageSens
* * * * *Chaque minute
*/5 * * * *Tous les cinq minutes
0 * * * *Chaque heure, à l'heure
0,30 * * * *Toutes les demi-heures
0 3 * * *Chaque jour à 03:00
0 9,17 * * *Deux fois par jour, à 09:00 et 17:00
*/15 9-17 * * 1-5Tous les quarts d'heure pendant les heures de bureau en semaine
0 8 * * 1-5Jours de semaine à 08:00
0 10 * * 6,0Samedis et dimanches à 10:00
30 7 * * MONLundis à 07:30
0 0 1 * *Minuit le premier de chaque mois
0 0 28-31 * *Chaque jour dans le dernier tronçon du moisLe cron standard n'a pas de « dernier jour du mois ». Ceci s'exécute jusqu'à quatre fois ; la solution habituelle est un script qui vérifie la date et quitte tôt.
0 0 1 1,4,7,10 *Minuit le premier de chaque trimestre
0 0 1 1 *Une fois par an, au début du 1er janvier

Extensions que ce site n'accepte pas

6

Quartz, Jenkins et certains planificateurs cloud les ajoutent. Elles sont listées pour que vous les reconnaissiez dans le crontab de quelqu'un d'autre — l'analyseur ici rejette chacune, tout comme le cron livré avec Linux.

ExpressionPlageSens
?« Pas de valeur spécifique », dans le champ jour que l'autre limite déjà
LLe dernier jour du mois, ou le dernier jour de semaine donné
15WLe jour de semaine le plus proche du 15
FRI#3Le troisième vendredi du mois
*/30 * * * * *Un sixième champ pour les secondes, à l'avantSix champs, pas cinq. Quartz et plusieurs bibliothèques utilisant des langages utilisent cette forme ; le fichier crontab non.
@rebootExécuter une fois au démarrage de la machineRéelle dans crontab, mais ce n'est pas un horaire — il n'y a pas de prochain démarrage à calculer, c'est pourquoi l'analyseur ici la refuse.

FAQ

Pourquoi ma tâche de « vendredi 13 » s'exécutait-elle tous les vendredis ?
Parce que quand les deux champs — jour du mois et jour de la semaine — sont limités, cron les traite comme un ou plutôt qu'un et. 0 5 13 * 5 s'exécute le 13 et tous les vendredis. Un vrai vendredi 13 nécessite une vérification de date dans le script lui-même.
Est-ce que */5 signifie « dans cinq minutes » ?
Non. Les étapes comptent à partir du bas de la plage du champ, pas du moment où vous installez la tâche, donc */5 dans le champ des minutes signifie :00, :05, :10, etc. indépendamment de quand c'a été écrit.
Quel fuseau horaire cron utilise-t-il ?
Celui du système, sauf si la crontab définit CRON_TZ ou TZ en haut. Cela compte deux fois par an : une tâche programmée dans l'heure que le changement d'heure d'été saute ne s'exécute pas, et une dans l'heure qui se répète peut s'exécuter deux fois.
Est-ce que 0 est la même chose que 7 dans le champ jour de la semaine ?
Oui, les deux signifient dimanche. Le doublet existe pour que la plage 1-7 couvrant lundi à dimanche puisse s'écrire naturellement, ce qu'un champ 0-6 ne peut pas exprimer en une plage.
Où puis-je tester une expression ?
L'analyseur cron sur ce site prend une expression et affiche les prochaines exécutions en langage naturel, localement dans votre navigateur. Le générateur à côté fait l'inverse : choisissez un horaire et il écrit l'expression.