Comment Lire et Comprendre les Expressions Cron
Une expression cron est une chaîne de cinq ou six champs qui décrit un planning récurrent. Une fois que vous avez appris le modèle, vous pouvez lire n'importe quelle expression cron comme du français simple. Ce guide vous apprend à décoder chaque élément de syntaxe cron, des simples * * * * * aux expressions complexes avec plages, pas et caractères spéciaux.
Les Cinq Champs de Cron
Chaque expression cron a cinq champs de temps suivis de la commande :
┌───────── Minute (0-59)
│ ┌──────── Heure (0-23)
│ │ ┌─────── Jour du Mois (1-31)
│ │ │ ┌────── Mois (1-12)
│ │ │ │ ┌───── Jour de la Semaine (0-7, 0 et 7 = Dimanche)
│ │ │ │ │
* * * * * <commande>
Lecture de gauche à droite : "À quelle minute, à quelle heure, quel jour du mois, quel mois, et quel jour de la semaine ?"
Lecture des Expressions Pas à Pas
Exemples Simples
0 9 * * *
Lecture : "À la minute 0, à l'heure 9, tous les jours du mois, tous les mois, tous les jours de la semaine." → S'exécute quotidiennement à 9h00.
*/15 * * * *
Lecture : "Toutes les 15 minutes de chaque heure, tous les jours." → S'exécute toutes les 15 minutes.
30 8 * * 1-5
Lecture : "À la minute 30, à l'heure 8, tous les jours du mois, tous les mois, du lundi au vendredi." → S'exécute en semaine à 8h30.
0 0 1 * *
Lecture : "À minuit le premier jour de chaque mois." → S'exécute mensuellement.
Exemples Complexes
0 9-17/2 * * 1-5
Décomposition :
0— à la minute 09-17/2— toutes les 2 heures de 9 à 17 (soit 9, 11, 13, 15, 17)*— tous les jours du mois*— tous les mois1-5— du lundi au vendredi
→ S'exécute à 9h00, 11h00, 13h00, 15h00 et 17h00 en semaine.
30 6 1,15 * 0
Décomposition :
30— à la minute 306— à l'heure 61,15— le jour 1 et le jour 15 du mois*— tous les mois0— le dimanche seulement
→ S'exécute à 6h30 le 1er et le 15 du mois, seulement si ces jours sont aussi des dimanches.
Référence des Caractères Spéciaux
* — Tous / Chaque
Correspond à n'importe quelle valeur pour ce champ.
0 * * * * → "Toutes les heures"
* * * * * → "Toutes les minutes"
, — Liste / Ou
Sépare plusieurs valeurs.
0 9,12,15 * * * → "À 9h, 12h et 15h"
- — Plage
Définit une plage inclusive de valeurs.
0 9-17 * * * → "Toutes les heures de 9h à 17h"
30 8 * * 1-5 → "En semaine à 8h30"
/ — Pas
Divise le champ en incréments.
*/15 * * * * → "Toutes les 15 minutes"
0 */2 * * * → "Toutes les 2 heures"
0 0 */3 * * → "Tous les 3 jours"
Les pas peuvent être combinés avec des plages :
0 9-17/2 * * * → "Toutes les 2 heures de 9h à 17h"
30 */4 * * 1-5 → "Toutes les 4 heures en semaine, à la minute 30"
L — Dernier (certains systèmes)
Dans certaines implémentations cron (comme Quartz), L signifie "dernier".
0 0 L * * → "Dernier jour de chaque mois"
# — Nième occurrence (certains systèmes)
0 9 * * 1#1 → "Premier lundi de chaque mois à 9h"
Expressions Courantes Décodées
| Expression | Lisible par l'Humain | Description |
|---|---|---|
* * * * * |
Toutes les minutes | |
*/5 * * * * |
Toutes les 5 minutes | |
0 * * * * |
À la minute 0 de chaque heure | Horaire |
0 */2 * * * |
Toutes les 2 heures | |
0 9 * * * |
Tous les jours à 9h | Quotidien |
0 9,17 * * * |
Tous les jours à 9h et 17h | |
0 9 * * 1-5 |
En semaine à 9h | |
30 8 * * 1 |
Les lundis à 8h30 | |
0 0 1 * * |
Premier de chaque mois | Mensuel |
0 0 1 1 * |
Le 1er janvier à minuit | Annuel |
*/15 9-17 * * 1-5 |
Toutes les 15 min pendant les heures ouvrées en semaine | |
0 0 * * 0 |
Tous les dimanches à minuit | Hebdomadaire |
0 0 */2 * * |
Tous les deux jours à minuit | |
0 22 * * 5 |
Tous les vendredis à 22h |
Cron à Six Champs (Avec Secondes)
Certaines implémentations cron (comme Quartz Scheduler) utilisent six champs, ajoutant les secondes au début :
┌───────── Seconde (0-59)
│ ┌──────── Minute (0-59)
│ │ ┌─────── Heure (0-23)
│ │ │ ┌────── Jour du Mois (1-31)
│ │ │ │ ┌───── Mois (1-12)
│ │ │ │ │ ┌──── Jour de la Semaine (0-7)
│ │ │ │ │ │
* * * * * * <commande>
0 */5 * * * * → "Toutes les 5 minutes, à la seconde 0"
0 0 9 * * * → "Tous les jours à 9h00m00s"
Raccourcis Non Standards
De nombreuses implémentations cron supportent ces alias :
@yearly → 0 0 1 1 * → "Une fois par an"
@monthly → 0 0 1 * * → "Une fois par mois"
@weekly → 0 0 * * 0 → "Une fois par semaine"
@daily → 0 0 * * * → "Une fois par jour"
@hourly → 0 * * * * → "Une fois par heure"
@reboot → (pas une heure) → "Exécuter au démarrage"
Traduire Cron en Langage Humain
Lorsque vous voyez une expression cron inconnue, décodez-la champ par champ :
Expression: 45 17 1,15 * 1-5
| Champ | Valeur | Signification |
|---|---|---|
| Minute | 45 | À la minute 45 |
| Heure | 17 | À 17h |
| Jour du Mois | 1,15 | Le 1er et le 15 |
| Mois | * | Tous les mois |
| Jour de la Semaine | 1-5 | Du lundi au vendredi |
Résultat : "À 17h45 le 1er et le 15 de chaque mois, seulement si ces jours sont en semaine."
Expression: 0 0 * * 0
| Champ | Valeur | Signification |
|---|---|---|
| Minute | 0 | À minuit |
| Heure | 0 | À 0h (minuit) |
| Jour du Mois | * | Tous les jours |
| Mois | * | Tous les mois |
| Jour de la Semaine | 0 | Dimanche |
Résultat : "Tous les dimanches à minuit."
Pièges Courants Lors de la Lecture de Cron
Piège 1 : * dans jour-de-la-semaine ET jour-du-mois signifie que les deux correspondent
Quand jour-du-mois et jour-de-la-semaine sont tous deux *, l'expression s'exécute n'importe quel jour. Mais quand les deux ont des valeurs spécifiques, le travail s'exécute si L'UN OU L'AUTRE correspond — c'est une condition OU.
0 9 15 * 1
Ceci s'exécute à 9h le 15 du mois ET tous les lundis (pas "le 15 ET lundi"). Pour s'exécuter seulement quand les deux correspondent, vous avez besoin de deux entrées crontab séparées ou d'une logique au niveau du script.
Piège 2 : Cron utilise l'heure locale, pas UTC
Cron utilise l'heure locale du système. Sur les serveurs configurés en UTC, 0 9 * * * s'exécute à 9h UTC. Vérifiez toujours le fuseau horaire du serveur avant de définir des plannings.
Piège 3 : 0 et 7 sont tous deux dimanche
Dans le champ jour-de-la-semaine, 0 et 7 représentent tous deux dimanche. C'est un héritage des premières implémentations Unix.
Outil en Ligne
L'outil Analyseur d'Expression Cron sur Help2Code décode n'importe quelle expression cron en une description lisible par l'humain. Collez une expression comme */15 9-17 * * 1-5 et voyez une décomposition champ par champ, les prochaines exécutions et une explication en français clair. Construisez de nouvelles expressions avec l'outil Générateur de Commande Cron.
Conclusion
Lire les expressions cron est une compétence qui devient naturelle avec la pratique. Rappelez-vous les cinq champs : minute, heure, jour-du-mois, mois, jour-de-la-semaine. Utilisez le joker * pour "tous", les plages avec - pour les intervalles, les pas avec / pour les incréments, et les listes avec , pour les valeurs spécifiques. Décodez toute expression inconnue champ par champ, et utilisez l'outil Analyseur d'Expression Cron pour vérifier votre compréhension.