Aide-Mémoire des Expressions Cron — Planifiez vos Tâches comme un Pro
Cron est l'épine dorsale de l'automatisation des tâches planifiées sur les systèmes Unix. Que vous fassiez la rotation des logs, exécutiez des sauvegardes de base de données ou déclenchiez des pipelines CI/CD, les expressions cron définissent quand ces tâches s'exécutent. La syntaxe est compacte mais puissante — et facile à mal configurer si vous devinez.
Cette référence couvre chaque élément de la syntaxe cron avec des exemples pratiques prêts à copier-coller. Si vous souhaitez construire et valider des expressions de manière interactive, ouvrez le Constructeur d'Expressions Cron à côté de ce guide.
Syntaxe Cron : Les cinq champs
Une expression cron standard se compose de 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–7, où 0 et 7 = Dimanche)
│ │ │ │ │
* * * * *
Chaque champ accepte une valeur spécifique, une plage, une liste ou un caractère générique. Ensemble, les cinq champs spécifient un calendrier récurrent exact.
| Champ | Valeurs autorisées | Caractères spéciaux |
|---|---|---|
| Minute | 0–59 | * , - / |
| Heure | 0–23 | * , - / |
| Jour du mois | 1–31 | * , - / |
| Mois | 1–12 | * , - / |
| Jour de la semaine | 0–7 | * , - / |
Les champs mois et jour de la semaine acceptent également des abréviations de trois lettres (JAN–DEC, SUN–SAT) dans la plupart des implémentations.
Caractères spéciaux expliqués
Comprendre quatre caractères spéciaux déverrouille toute la puissance de cron :
Astérisque * — « Chaque »
Correspond à chaque valeur possible pour ce champ.
* * * * * # Chaque minute de chaque heure de chaque jour
Virgule , — « Et »
Spécifie une liste de valeurs discrètes.
0 9,12,18 * * * # À 9h00, 12h00 et 18h00 quotidiennement
Tiret - — « Jusqu'à »
Définit une plage inclusive.
0 9-17 * * * # Chaque heure de 9h à 17h
Barre oblique / — « Tous les n »
Définit un intervalle de pas depuis le début de la plage.
*/10 * * * * # Toutes les 10 minutes (0, 10, 20, 30, 40, 50)
Vous pouvez combiner une plage avec un pas :
0 9-17/2 * * * # Toutes les 2 heures de 9h à 17h (9, 11, 13, 15, 17)
Exemples courants de planification Cron
Mettez cette table en favoris. Ce sont les planifications que vous utiliserez encore et encore.
| Planification | Expression | Explication |
|---|---|---|
| Chaque minute | * * * * * | S'exécute au début de chaque minute |
| Toutes les 5 minutes | */5 * * * * | Minutes 0, 5, 10, 15, …, 55 |
| Toutes les 15 minutes | */15 * * * * | Minutes 0, 15, 30, 45 |
| Chaque heure | 0 * * * * | À la minute 0 de chaque heure |
| Toutes les 6 heures | 0 */6 * * * | À 00:00, 06:00, 12:00, 18:00 |
| Quotidiennement à minuit | 0 0 * * * | Une fois par jour à 00:00 |
| Quotidiennement à 3h | 0 3 * * * | Une fois par jour à 03:00 |
| Chaque lundi à 9h | 0 9 * * 1 | Hebdomadaire le lundi à 09:00 |
| Chaque jour ouvrable à 8h | 0 8 * * 1-5 | Lundi à vendredi à 08:00 |
| Chaque week-end à midi | 0 12 * * 0,6 | Samedi et dimanche à 12:00 |
| Premier de chaque mois | 0 0 1 * * | Minuit le 1er de chaque mois |
| Chaque trimestre (Jan, Avr, Jul, Oct) | 0 0 1 1,4,7,10 * | Minuit le 1er des mois trimestriels |
| Toutes les 15 min en heures ouvrables | */15 9-17 * * 1-5 | Jours ouvrables, 9h–17h, toutes les 15 min |
Collez n'importe quelle expression dans le Constructeur d'Expressions Cron pour visualiser les prochains moments d'exécution.
Patterns avancés
Combiner listes et plages
Les champs acceptent une syntaxe mixte. Pour exécuter une tâche à 8h et 18h les jours ouvrables :
0 8,18 * * 1-5
Pour cibler des mois spécifiques avec un pas :
0 0 1 1-12/3 * # Tous les 3 mois à partir de janvier (Jan, Avr, Jul, Oct)
Jour du mois vs. Jour de la semaine
Quand le jour du mois et le jour de la semaine sont tous deux définis (pas *), le comportement dépend de l'implémentation. Dans le cron standard, la tâche s'exécute si l'une ou l'autre condition est remplie — c'est une relation OU, pas ET. Cela surprend beaucoup de monde.
0 0 15 * 1 # S'exécute le 15 ET chaque lundi — pas "le lundi 15"
Exécution au démarrage
Bien que ce ne soit pas une expression cron à proprement parler, @reboot est un raccourci largement supporté :
@reboot /usr/local/bin/start-service.sh
Autres raccourcis courants :
| Raccourci | Équivalent |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
Cron dans différents environnements
La syntaxe à cinq champs est universelle, mais la façon de configurer cron varie selon la plateforme.
Crontab Linux
Le classique. Éditez votre crontab utilisateur avec crontab -e :
# Exécuter la sauvegarde tous les jours à 2h
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
Les tâches cron système dans /etc/cron.d/ incluent un champ utilisateur supplémentaire :
0 2 * * * root /usr/local/bin/cleanup.sh
GitHub Actions
GitHub Actions utilise la même syntaxe à cinq champs dans un déclencheur schedule. Tous les horaires sont en UTC.
on:
schedule:
- cron: '0 3 * * 1-5' # Jours ouvrables à 3h UTC
Pour une exploration approfondie de la configuration YAML, consultez YAML pour Kubernetes et YAML pour Docker Compose.
Kubernetes CronJob
Kubernetes encapsule les expressions cron dans une ressource CronJob :
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: reporting:latest
command: ["python", "generate_report.py"]
restartPolicy: OnFailure
Kubernetes utilise UTC par défaut. À partir de la v1.25, vous pouvez définir timeZone: "America/New_York" dans la spécification du CronJob.
AWS CloudWatch (EventBridge)
AWS utilise une syntaxe légèrement différente avec six champs (ajout des secondes) et les enveloppes rate() / cron() :
cron(0 3 * * ? *) # Quotidiennement à 3h UTC
Notez le caractère ? — AWS l'exige pour le jour du mois ou le jour de la semaine quand l'autre est spécifié. C'est différent du cron standard.
Pièges courants
1. Confusion des fuseaux horaires
Cron utilise le fuseau horaire du système sous Linux, mais Kubernetes et GitHub Actions s'exécutent en UTC. Une tâche planifiée à 0 9 * * * se déclenchera à 9h UTC, soit 10h heure de Paris.
Vérifiez toujours quel fuseau horaire votre planificateur utilise. Pour les conversions d'horodatages, notre guide Horodatage Unix expliqué couvre les décalages UTC en détail.
2. Exécutions qui se chevauchent
Si une tâche prend plus de temps que l'intervalle entre les exécutions, vous obtiendrez des instances qui se chevauchent. Un script qui s'exécute pendant 8 minutes sur un planning */5 * * * * va s'empiler.
Solutions :
- Utilisez un fichier verrou (
flocksous Linux) - Définissez
concurrencyPolicy: Forbiddans les CronJobs Kubernetes - Vérifiez les instances en cours au début de votre script
3. Sortie manquante et débogage
Cron ne capture pas stdout par défaut. Redirigez toujours la sortie :
*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
Si une tâche cron ne s'exécute pas, vérifiez :
grep CRON /var/log/syslogpour les logs d'exécution- Les permissions de fichier du script
- La variable d'environnement
PATH— cron a unPATHminimal par défaut
4. Le piège du « 31 de chaque mois »
0 0 31 * * # Ne s'exécute que dans les mois ayant 31 jours
Cela s'exécute en janvier, mars, mai, juillet, août, octobre et décembre — mais saute silencieusement les cinq autres mois. Si vous avez besoin d'une tâche de fin de mois, envisagez de l'exécuter le 1er et d'ajuster la logique de votre script, ou utilisez un outil qui supporte la sémantique « dernier jour du mois ».
5. Oublier le saut de ligne à la fin du crontab
Certaines implémentations de cron nécessitent un saut de ligne en fin de fichier crontab. Si votre dernière entrée ne s'exécute pas, ajoutez une ligne vide à la fin.
Construire des expressions visuellement
Mémoriser la syntaxe fonctionne pour les patterns courants, mais les planifications complexes sont plus faciles à construire visuellement. Le Constructeur d'Expressions Cron sur alltools.one vous permet de :
- Sélectionner des valeurs pour chaque champ via des menus déroulants
- Voir une description lisible de la planification
- Prévisualiser les prochains moments d'exécution
- Copier l'expression finale en un clic
Il s'exécute entièrement dans votre navigateur — aucune donnée n'est envoyée à un serveur.
Carte de référence rapide
Copiez ce bloc dans la documentation de votre projet ou le wiki de votre équipe :
# ┌───── min (0-59)
# │ ┌───── heure (0-23)
# │ │ ┌───── jour du mois (1-31)
# │ │ │ ┌───── mois (1-12)
# │ │ │ │ ┌───── jour de la semaine (0-7, Dim=0 ou 7)
# │ │ │ │ │
# * * * * *
*/5 * * * * # Toutes les 5 minutes
0 * * * * # Chaque heure
0 0 * * * # Quotidiennement à minuit
0 9 * * 1-5 # Jours ouvrables à 9h
0 0 1 * * # Premier du mois
*/15 9-17 * * 1-5 # Toutes les 15 min, heures ouvrables
Pour aller plus loin
- Horodatage Unix expliqué — Comprendre le temps epoch et les conversions de fuseaux horaires
- YAML pour Kubernetes — Configurer les CronJobs et autres ressources Kubernetes
- YAML pour Docker Compose — Planifier des conteneurs dans des configurations compose
Prêt à construire votre prochaine expression cron ? Ouvrez le Constructeur d'Expressions Cron et définissez votre planification correctement dès la première fois.