Les expressions cron paraissent cryptiques au premier regard - cinq champs séparés par des espaces, remplis d'astérisques, de chiffres, de barres obliques et de virgules. Mais chaque field suit une logique cohérente et, une fois comprise, lire et écrire des planifications cron devient simple. Ce guide décompose chaque partie de la syntaxe cron, explique les caractères spéciaux, présente les modèles de planification les plus courants et couvre les outils qui résolvent, valident et simulent les expressions cron avant leur déploiement.
Qu'est-ce qu'une expression cron ?
Une expression cron est une chaîne de cinq (ou parfois six) champs séparés par des espaces qui définit une planification récurrente pour des tâches automatisées. Le format a été inventé avec le démon cron d'Unix au début des années 1970 et n'a pratiquement pas changé depuis. Aujourd'hui, il est utilisé dans les fichiers crontab Linux, les pipelines CI/CD comme GitHub Actions et GitLab CI, les planificateurs cloud comme AWS EventBridge et Google Cloud Scheduler, les orchestrateurs de conteneurs comme Kubernetes CronJob, ainsi que dans des frameworks applicatifs comme Spring et Quartz.
L'anatomie d'une expression cron
Le format standard à cinq champs est le suivant :
┌----------- minute (0-59)
│ ┌--------- heure (0-23)
│ │ ┌------- jour du mois (1-31)
│ │ │ ┌----- mois (1-12)
│ │ │ │ ┌--- jour de la semaine (0-7, dimanche = 0 ou 7)
│ │ │ │ │
* * * * * commande à exécuterLes champs se lisent de gauche à droite : minute, heure, jour du mois, mois, jour de la semaine. L'expression « 0 9 * * 1-5 » se déclenche à 09:00 chaque jour ouvré. Chaque champ peut contenir une valeur unique, une liste séparée par des virgules, une plage, un pas, un joker ou une combinaison. Comprendre ces opérateurs constitue toute la compétence de lecture de cron.
Note
Syntaxe des expressions cron champ par champ
Chaque champ possède une plage définie de valeurs entières valides. Les valeurs hors plage produisent une erreur ou une mauvaise configuration silencieuse selon l'implémentation de cron. Comprendre la plage valide de chaque champ est le fondement de la lecture de toute expression cron.
Plages valides des champs
- Minute - de 0 à 59. La valeur 0 correspond au début de l'heure ; la valeur 59 correspond à une minute avant l'heure suivante.
- Heure - de 0 à 23. Format 24 heures : 0 est minuit, 12 est midi, 23 est 11 PM.
- Jour du mois - de 1 à 31. Les jours sont indexés à partir de 1. Certains mois ont moins de jours - février compte 28 ou 29 jours, avril/juin/septembre/novembre en comptent 30.
- Mois - de 1 à 12. Janvier est 1, décembre est 12. Certaines implémentations acceptent aussi les abréviations de trois lettres : JAN, FEB, MAR, etc.
- Jour de la semaine - de 0 à 7. 0 et 7 représentent tous deux le dimanche. Lundi est 1, samedi est 6. Certaines implémentations prennent en charge MON, TUE, WED, THU, FRI, SAT, SUN.
Comment les champs interagissent
Les cinq champs sont évalués ensemble comme un ET logique - le job s'exécute lorsque tous les champs sans joker correspondent simultanément. « 0 9 15 * * » se déclenche exactement à 09:00 le 15 de chaque mois. L'exception critique survient lorsque le jour du mois et le jour de la semaine sont tous deux des valeurs sans joker - dans ce cas, la plupart des démons cron se déclenchent si L'UNE DES conditions est vraie (un OU logique), pas les deux. C'est une source notoire de comportements inattendus.
Warning
Les caractères spéciaux expliqués
La puissance de cron vient de ses caractères spéciaux - les opérateurs qui transforment des valeurs fixes en modèles de planification flexibles. Maîtriser ces six opérateurs couvre pratiquement tous les modèles de planification que vous rencontrerez.
Les six opérateurs principaux
| Caractère | Nom | Exemple | Signification |
|---|---|---|---|
| * | Joker | * dans minute | Toutes les valeurs valides (0-59 pour les minutes) |
| , | Liste | 1,15,30 dans minute | Aux minutes 1, 15 et 30 |
| - | Plage | 1-5 dans jour de semaine | Du lundi au vendredi (jours 1 à 5) |
| / | Pas | */15 dans minute | Toutes les 15 minutes (0, 15, 30, 45) |
| ? | Non-spécifié | ? dans jour du mois | Aucune valeur spécifique (Quartz/Spring uniquement) |
| @ | Macro | @daily | Alias abrégés (@daily = 0 0 * * *) |
Combiner les opérateurs
Les opérateurs peuvent être combinés au sein d'un même champ. « 0,30 9-17 * * 1-5 » signifie « aux minutes 0 et 30 de chaque heure de 9 h à 17 h, du lundi au vendredi ». La syntaxe de pas s'applique aussi à une plage : « 0-30/5 » dans le champ des minutes signifie toutes les 5 minutes de la minute 0 à la minute 30 (0, 5, 10, 15, 20, 25, 30). Le Traducteur Cron en Langage Naturel décompose toute combinaison en langage clair avec des explications champ par champ.
Tip
Modèles de planification cron courants
La majorité des planifications cron réelles relèvent d'une poignée de modèles récurrents. Connaître ces modèles de vue permet de lire la plupart des crontabs de production sans référence.
- "* * * * *" - Chaque minute. La planification la plus fréquente possible. Utilisée pour les vérifications de pulsation et la supervision.
- "*/5 * * * *" - Toutes les 5 minutes. Courant pour les tâches de sondage et le préchauffage de cache.
- "0 * * * *" - Chaque heure pile. Standard pour les traitements par lots horaires.
- "0 0 * * *" - Tous les jours à minuit (UTC). Le réglage par défaut des tâches de nettoyage quotidien.
- "0 9 * * 1-5" - 9 h chaque jour ouvré. Planification standard aux heures de bureau.
- "0 0 1 * *" - Minuit le 1er de chaque mois. Exécutions de facturation mensuelle, génération de rapports.
- "0 0 1 1 *" - Minuit le 1er janvier. Tâches annuelles - renouvellements de licences, rapports de fin d'année.
- "0 0 * * 0" - Minuit chaque dimanche. Fenêtres de maintenance hebdomadaires.
Construire des planifications personnalisées à partir de modèles
La plupart des planifications complexes sont des combinaisons de ces modèles. « 0 2 * * 6,0 » signifie « 2 h le samedi et le dimanche » - la fenêtre de maintenance du week-end. « */10 8-18 * * 1-5 » signifie « toutes les 10 minutes de 8 h à 18 h, jours ouvrés uniquement ». Si vous connaissez la planification cible en langage clair, le Crontab Expression Builder vous permet de configurer chaque champ visuellement et génère l'expression correcte avec une confirmation lisible et les cinq prochaines exécutions.
Crontab Expression Builder
Créez des expressions cron visuellement avec 15 préréglages, 5 modes de champ, une description instantanée en langage clair et un aperçu des 5 prochaines exécutions - gratuit, sans inscription.
Comment créer et valider des expressions cron
Écrire une expression cron from scratch en espérant qu'elle soit correcte est risqué. Un seul champ transposé ou un opérateur mal compris peut déclencher un job à des moments complètement erronés - ou jamais. Ces outils éliminent ce risque.
Écrivez ou sélectionnez votre expression
Ouvrez le Crontab Expression Builder et tapez votre expression directement ou choisissez parmi les 15 préréglages intégrés. Chaque préréglage couvre un modèle de planification courant (chaque minute, horaire, quotidien, jours ouvrés, mensuel) et peut être ajusté à l'aide des contrôles visuels sans toucher à l'expression brute.
Validez les erreurs de syntaxe
Collez l'expression dans le Validateur d'Expressions Cron. Il vérifie chaque champ par rapport à sa plage valide, valide les bornes des plages (le début doit être inférieur à la fin), confirme que les valeurs de pas sont non nulles et signale les macros non prises en charge par le crontab standard à 5 champs. Chaque erreur s'accompagne d'un message au niveau de la ligne expliquant ce que l'analyseur attendait.
Traduisez en langage clair
Passez l'expression validée dans le Traducteur Cron en Langage Naturel. La sortie est une phrase complète en langage clair décrivant la planification - « À 2 h 30, le lundi, mercredi et vendredi » - plus une décomposition champ par champ. Si la description ne correspond pas à votre intention, révisez l'expression avant de déployer.
Simulez les 12 prochains mois d'exécutions
Pour les tâches planifiées où le rythme importe - exécutions de facturation, exports de données, fenêtres de maintenance - ouvrez l'Interactive Cron Scheduler et simulez l'expression sur les 12 prochains mois. La vue calendrier affiche la densité mensuelle des exécutions et la chronologie montre les horodatages exacts. Confirmez que la planification se déclenche aux dates attendues avant de fusionner la configuration en production.
Validateur d'Expressions Cron
Validez la syntaxe cron à 5 champs, les plages, les pas, les valeurs de liste et les macros avec des diagnostics instantanés au niveau des champs - local au navigateur, gratuit, sans inscription.
Cron dans la CI/CD et les planificateurs cloud
La syntaxe cron est utilisée bien au-delà du crontab Linux. Les plateformes CI/CD et cloud modernes ont toutes adopté le même format à 5 champs, mais chacune a ses propres particularités concernant la gestion des fuseaux horaires, la prise en charge des macros et les restrictions d'intervalle minimal.
Différences plateforme par plateforme
| Plateforme | Champs | Fuseau horaire | Macros | Intervalle min. |
|---|---|---|---|---|
| Linux crontab | 5 | Heure locale système | ✓ Les 6 | Chaque minute |
| GitHub Actions | 5 | UTC uniquement | ✗ Aucune | Toutes les 5 min (dérive forcée de 15 min) |
| GitLab CI | 5 | UTC uniquement | ✓ Partielle | Chaque minute |
| AWS EventBridge | 5 ou 6 | UTC uniquement | ✗ Aucune | Chaque minute |
| Google Cloud Scheduler | 5 ou unix | N'importe quel fuseau IANA | ✓ Certaines | Chaque minute |
| Kubernetes CronJob | 5 | Fuseau du cluster | ✗ Aucune | Chaque minute |
| Spring Scheduler | 6 | Réglage JVM par défaut | ✓ Oui | Chaque seconde |
Planification cron avec GitHub Actions
GitHub Actions utilise la syntaxe cron standard à 5 champs mais s'exécute toujours en UTC. Si vous voulez un job à 9 h heure de l'Est (UTC-5), vous écrivez « 0 14 * * * ». GitHub Actions ne prend pas non plus en charge la syntaxe des macros (@daily, @weekly), utilisez donc l'expression complète. Les workflows planifiés pendant les périodes de forte charge peuvent se déclencher jusqu'à 15 minutes en retard - concevez vos jobs pour tolérer cette dérive.
Convertir cron en minuteurs systemd
Les systèmes Linux modernes utilisent de plus en plus de minuteurs systemd à la place du crontab classique. Le format OnCalendar de systemd utilise une syntaxe différente mais couvre les mêmes modèles. Le Convertisseur Cron vers Minuteur Systemd convertit toute expression cron à 5 champs en configuration d'unité de minuteur systemd équivalente, avec un modèle complet de fichiers .timer et .service.
Pièges et cas limites de cron
Même les développeurs expérimentés rencontrent des échecs silencieux avec cron. Voici les pièges les plus courants - chacun a coûté à des systèmes de production des indisponibilités inaperçues ou des exécutions de jobs dupliquées.
Surprises de fuseau horaire
Cron s'exécute par défaut dans le fuseau horaire local du serveur. Si votre serveur est en UTC mais votre entreprise à New York (UTC-5), « 0 9 * * * » se déclenche à 4 h heure locale, pas à 9 h. Les plateformes cloud comme GitHub Actions et AWS EventBridge s'exécutent toujours en UTC, ce qui signifie que tous les calculs de fuseaux horaires vous incombent. Confirmez toujours le fuseau horaire avant de déployer une planification. L'Interactive Cron Scheduler permet de simuler des exécutions avec le décalage horaire appliqué.
Cas limites de fin de mois
Planifier une tâche le 29, 30 ou 31 du mois la fait sauter silencieusement les mois qui n'ont pas cette date. « 0 0 31 * * » ne s'exécute jamais en avril, juin, septembre ou novembre. « 0 0 29 2 * » s'exécute en février uniquement les années bissextiles. Si vous avez besoin d'une planification « dernier jour du mois », il faut une approche plus intelligente - soit exécuter quotidiennement avec un script qui vérifie la date, soit utiliser un planificateur cloud qui prend en charge la syntaxe L (dernier) jour.
Transitions heure d'été
Les transitions d'heure d'été peuvent faire s'exécuter des jobs cron deux fois ou les faire sauter. Quand les horloges avancent, les heures dans l'heure sautée ne se produisent jamais. Quand les horloges reculent, les heures dans l'heure répétée se produisent deux fois. Les jobs planifiés dans un fuseau horaire local pendant la fenêtre de transition sont affectés. La pratique la plus sûre consiste à faire tourner serveurs et planificateurs en UTC, qui n'a jamais de transitions d'heure d'été.
Warning
Le problème du chaque-seconde
Le cron standard à 5 champs a une résolution minimale d'une minute. Si vous avez besoin d'un job toutes les 10 secondes, cron n'est pas le bon outil - utilisez un minuteur système, une file de jobs avec délais ou le champ des secondes disponible dans Spring Scheduler et Quartz. Tenter d'approcher des planifications inframinutes avec plusieurs entrées crontab est source d'erreurs et crée des conditions de concurrence lorsque les jobs se chevauchent.
Key takeaways
- Une expression cron comporte cinq champs : minute (0-59), heure (0-23), jour du mois (1-31), mois (1-12), jour de la semaine (0-7).
- Les six caractères spéciaux sont * (joker), , (liste), - (plage), / (pas), ? (non-spécifié, Quartz uniquement) et @ (macros comme @daily).
- Lorsque le jour du mois et le jour de la semaine sont tous deux sans joker, la plupart des démons cron se déclenchent si L'UN des deux correspond - une source fréquente de doubles exécutions inattendues.
- Utilisez le Crontab Expression Builder pour construire visuellement, le Validateur d'Expressions Cron pour vérifier la syntaxe et l'Interactive Cron Scheduler pour simuler 12 mois d'exécutions.
- GitHub Actions utilise un cron à 5 champs UTC sans prise en charge des macros ; AWS EventBridge et Google Cloud Scheduler utilisent aussi UTC ; le crontab Linux utilise le fuseau horaire local du système.
- Ne planifiez pas le 29, 30 ou 31 si le job doit s'exécuter chaque mois - ces jours n'existent pas dans tous les mois.
- Le cron standard a une résolution minimale d'une minute ; utilisez des minuteurs systemd, des files de jobs ou Spring/Quartz pour les besoins de planification inframinute.