Comment lire une expression cron
Une expression cron décrit une planification récurrente en quelques champs séparés par des espaces. Le principe est simple, mais l’ordre des champs et les caractères spéciaux diffèrent selon les systèmes. Ce guide montre comment lire les formats courants.
Les cinq champs Unix
Le cron classique d’Unix et de Linux utilise cinq champs, lus de gauche à droite :
minute heure jour-du-mois mois jour-de-la-semaine
Ainsi, 30 9 * * 1-5 signifie « à 09:30, du lundi au vendredi ». Les minutes vont de 0 à 59, les heures de 0 à 23, les jours du mois de 1 à 31 et les mois de 1 à 12. Le jour de la semaine va de 0 à 6, 0 désignant le dimanche (de nombreuses implémentations acceptent aussi 7 pour le dimanche). La plupart des versions acceptent également des noms comme JAN ou MON, et des macros comme @daily ou @hourly.
Formats Spring, Quartz et AWS
D’autres planificateurs ajoutent des champs, ce qui est la source de confusion la plus fréquente lorsqu’on copie une expression d’un système à un autre.
| Format | Champs | Jour de la semaine |
|---|---|---|
| Unix / Linux | 5 : minute heure jour mois jour de la semaine | 0–6, dimanche = 0 |
| Spring | 6 : seconde minute heure jour mois jour de la semaine | 0–7, dimanche = 0 ou 7 |
| Quartz | 6 ou 7 : seconde minute heure jour mois jour de la semaine [année] | 1–7, dimanche = 1 |
| AWS EventBridge | 6 : minute heure jour mois jour de la semaine année | 1–7, dimanche = 1 |
Les mêmes chiffres peuvent avoir un sens différent : 0 0 12 * * ? signifie « tous les jours à midi » dans Quartz, alors qu’en lecture à 5 champs, l’expression ne serait pas valide. La numérotation des jours de la semaine est aussi décalée : dans Quartz et AWS, 2 désigne le lundi, mais dans le cron Unix, c’est le mardi. Les noms de jours comme MON évitent cette ambiguïté lorsqu’ils sont pris en charge.
Caractères spéciaux
*toutes les valeurs du champ.,une liste, p. ex.1,15.-une plage, p. ex.9-17ouMON-FRI./un pas :*/15dans le champ des minutes signifie toutes les 15 minutes ;5/15commence à 5 (non pris en charge par le cron Unix classique, où l’on utilise une plage comme5-59/15).?« aucune valeur précise » ; Quartz et AWS l’exigent dans le jour du mois ou dans le jour de la semaine.Ldernier :Ldans le jour du mois désigne le dernier jour du mois ; dans Quartz,6Ldans le jour de la semaine désigne le dernier vendredi.Wjour ouvré le plus proche :15West le jour ouvré le plus proche du 15.#n-ième jour de la semaine du mois :6#3est le troisième vendredi dans la numérotation de Quartz et d’AWS.
L, W et # sont des extensions que le cron Unix classique ne prend pas en charge.
Jour du mois ou jour de la semaine
Lorsque les deux champs de jour sont restreints, les systèmes ne les combinent pas de la même façon. Dans le cron Unix classique, la tâche s’exécute dès que l’un ou l’autre champ correspond : 0 9 13 * 5 s’exécute le 13 de chaque mois et chaque vendredi, et pas seulement le vendredi 13. Spring exige que les deux correspondent. Quartz et AWS évitent la question en exigeant ? dans l’un des deux champs.
L’analyseur cron de LeedyBox applique la règle du format choisi et indique dans son résumé s’il suffit que l’un des jours corresponde ou si les deux doivent correspondre.
Fuseaux horaires et heure d’été
Une expression cron ne comporte pas de fuseau horaire. Elle s’exécute dans le fuseau horaire du système ou du service qui l’exécute, qui peut être l’heure locale du serveur ou UTC. Une tâche prévue pour 09:00 heure locale peut s’exécuter à une autre heure si le serveur utilise UTC.
L’heure d’été ajoute d’autres cas limites. Lorsque les horloges avancent, une heure comme 02:30 peut ne pas exister ce jour-là ; lorsqu’elles reculent, elle peut se produire deux fois. Selon l’implémentation, une tâche située dans cet intervalle peut être sautée, exécutée en retard ou exécutée deux fois. Planifier les tâches importantes en dehors de cet intervalle, ou en UTC, limite les surprises. L’analyseur cron vous permet de choisir un fuseau horaire et liste les prochaines exécutions afin que vous puissiez vérifier les dates autour d’un changement d’heure.
Questions fréquentes
Comment exécuter une tâche toutes les 5 minutes ?
Dans le cron Unix, utilisez */5 * * * *. Dans Spring, ajoutez un champ des secondes au début : 0 */5 * * * *.
Pourquoi mon expression Quartz échoue-t-elle dans la crontab Linux ?
Les expressions Quartz commencent par un champ des secondes et peuvent utiliser ? ou L, que crontab n’accepte pas. Réécrivez l’expression au format à 5 champs.
Les prochaines exécutions affichées par l’analyseur sont-elles exactes ?
Elles sont calculées dans votre navigateur pour le format et le fuseau horaire sélectionnés. Vérifiez la planification sur le système qui exécutera la tâche, car les implémentations peuvent différer.