Développement · 4 min de lecture ·

Les expressions cron expliquées, avec 10 exemples prêts à l’emploi

Cinq champs, quatre symboles et un piège de fuseau horaire. Apprenez à lire et écrire des planifications cron, avec des exemples à copier.

Cron est le planificateur derrière les sauvegardes, les rapports et les tâches de nettoyage sur les serveurs du monde entier, et sa syntaxe se retrouve aussi dans GitHub Actions, les CronJobs de Kubernetes et la plupart des planificateurs cloud. Une planification, ce sont cinq champs séparés par des espaces.

┌ minute (0-59)
│ ┌ heure (0-23)
│ │ ┌ jour du mois (1-31)
│ │ │ ┌ mois (1-12)
│ │ │ │ ┌ jour de la semaine (0-6, 0 = dimanche)
* * * * *

Quatre symboles

* signifie toutes les valeurs. Une virgule forme une liste (1,15), un tiret une plage (1-5) et une barre oblique un pas (*/15 = toutes les 15 unités). Ces quatre-là couvrent presque toutes les planifications.

10 exemples

*/5 * * * *       toutes les 5 minutes
0 * * * *         toutes les heures pile
0 9 * * *         tous les jours à 09:00
30 2 * * *        toutes les nuits à 02:30
0 9 * * 1-5       du lundi au vendredi à 09:00
0 18 * * 5        le vendredi à 18:00
0 0 1 * *         à minuit le 1er de chaque mois
0 0 1 1 *         une fois par an, le 1er janvier
0 */6 * * *       toutes les 6 heures
15 8,12,17 * * *  à 08:15, 12:15 et 17:15 chaque jour

Piège 1 : jour du mois et jour de la semaine

Quand les deux champs sont restreints, le cron classique lance la tâche si l’un ou l’autre correspond. 0 0 1 * 1 s’exécute le 1er de chaque mois et aussi tous les lundis, pas seulement les lundis qui tombent un 1er.

Piège 2 : le fuseau horaire

Cron n’a pas de fuseau horaire propre. La tâche s’exécute dans le fuseau de la machine ou du service qui la lance, souvent UTC. Une tâche réglée sur 0 9 * * * sur un serveur UTC tourne à 09:00 UTC, ce qui peut être plusieurs heures plus tôt ou plus tard chez vous, et l’heure d’été peut encore la décaler.

Piège n° 3 : exécutions qui se chevauchent ou sont manquées

Cron lance une tâche à l’heure prévue, que l’exécution précédente soit terminée ou non. Une sauvegarde programmée toutes les 5 minutes qui dure 7 minutes finit par tourner deux fois en même temps. Protégez les tâches longues par un verrou (sous Linux, flock le fait en une ligne) ou rendez-les sûres en parallèle. Cron ne rattrape pas non plus le retard : si la machine est éteinte à 02:30, la tâche de 02:30 ne s’exécute tout simplement pas cette nuit-là.

*/5 * * * *  flock -n /tmp/backup.lock /usr/local/bin/backup.sh

Raccourcis et petites différences

Beaucoup d’implémentations de cron acceptent des raccourcis comme @hourly, @daily, @weekly, @monthly et @reboot à la place des cinq champs. Dans la plupart, le dimanche peut s’écrire 0 ou 7, et des noms comme MON ou JAN sont autorisés. Les plateformes diffèrent dans le détail : consultez la documentation du système qui exécutera la tâche, surtout pour les planificateurs gérés dans le cloud.

Où part la sortie ?

Par défaut, cron envoie la sortie d’une tâche par e-mail à l’utilisateur local, ce qui, sur la plupart des serveurs, revient à la perdre. Redirigez la sortie vers un fichier journal ou votre système de logs, pour qu’une tâche en échec laisse une trace :

30 2 * * *  /usr/local/bin/report.sh >> /var/log/report.log 2>&1

Vérifier avant de déployer

Collez une expression dans l’explicateur d’expressions cron de 4Dev et il vous relit la planification en langage clair. Il gère le format standard à cinq champs ; les expressions à six ou sept champs avec secondes ou années, comme celles de Quartz ou Spring, sont refusées avec une erreur.

Ouvrir l’explicateur d’expressions cron

LinkedInXFacebook