Aller au contenu
Toolbrik
Retour au blog

Aide-mémoire cron : syntaxe et 20 exemples prêts à copier

5 min de lectureOutil associé: Analyseur d'Expressions Cron

Cron est le planificateur de tâches des systèmes Unix, et sa syntaxe s'est glissée partout : serveurs Linux, Kubernetes, GitHub Actions, fonctions serverless, Laravel, Spring… L'apprendre prend dix minutes. L'oublier, encore moins. Cet aide-mémoire est fait pour rester à portée de main.

Les cinq champs

Une expression cron classique comporte cinq champs séparés par des espaces :

┌───────────── minute (0–59)
│ ┌─────────── heure (0–23)
│ │ ┌───────── jour du mois (1–31)
│ │ │ ┌─────── mois (1–12 ou JAN–DEC)
│ │ │ │ ┌───── jour de la semaine (0–7 ou SUN–SAT ; 0 et 7 = dimanche)
│ │ │ │ │
* * * * *  commande

Chaque champ accepte ces opérateurs :

Symbole Signification Exemple Se lit
* n'importe quelle valeur * * * * * chaque minute
, liste 0 9,14 * * * à 9 h et à 14 h
- plage 0 9-17 * * * toutes les heures pile, de 9 h à 17 h
/ pas */15 * * * * toutes les 15 minutes

20 exemples dont vous aurez besoin

Expression Quand elle s'exécute
* * * * * Chaque minute
*/5 * * * * Toutes les 5 minutes
*/15 * * * * Toutes les 15 minutes (:00, :15, :30, :45)
0 * * * * Toutes les heures pile
30 * * * * Toutes les heures et demie
0 */2 * * * Toutes les 2 heures
0 0 * * * Tous les jours à minuit
0 8 * * * Tous les jours à 8 h
30 23 * * * Tous les jours à 23 h 30
0 9 * * 1-5 Du lundi au vendredi à 9 h
0 10 * * 6,0 Samedis et dimanches à 10 h
0 9-18 * * 1-5 Toutes les heures de 9 h à 18 h en semaine
0 0 * * 0 Chaque dimanche à minuit
0 0 1 * * Le 1er de chaque mois
0 0 15 * * Le 15 de chaque mois
0 0 1 1 * Le 1er janvier (une fois par an)
0 0 1 */3 * Le premier jour de chaque trimestre
0 3 * * 1 Le lundi à 3 h (classique pour les sauvegardes)
*/10 8-20 * * * Toutes les 10 minutes entre 8 h et 20 h 59
0 12 1-7 * 1 ⚠️ Ce n'est pas « le premier lundi du mois » (voir plus bas)

Si vous avez un doute sur une expression, collez-la dans l'analyseur cron : il affiche les prochaines dates d'exécution. Et si vous préférez la construire sans écrire la syntaxe, le générateur cron le fait avec des menus et vous l'explique en langage clair.

Les raccourcis @

Le cron de Linux (et la plupart de ses dérivés) accepte des alias lisibles ; GitHub Actions et d'autres planificateurs cloud, non :

Alias Équivaut à
@yearly ou @annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily ou @midnight 0 0 * * *
@hourly 0 * * * *
@reboot Au démarrage du système

Les 5 erreurs qui cassent le plus de tâches

1. Jour du mois et jour de la semaine se combinent avec OU, pas avec ET

C'est le piège le plus célèbre. Dans le cron classique, si vous restreignez à la fois le jour du mois et le jour de la semaine, la tâche s'exécute dès que l'un des deux correspond. Ainsi, 0 12 1-7 * 1 ne veut pas dire « le premier lundi du mois à midi », mais « les jours 1 à 7 de chaque mois et aussi tous les lundis ».

La solution habituelle consiste à ne garder qu'un des deux champs et à filtrer dans la commande :

0 12 1-7 * * [ "$(date +\%u)" = 1 ] && /chemin/script.sh

(Dans une crontab, le % doit être échappé en \% : sans la barre, cron l'interprète comme un saut de ligne.)

2. Le fuseau horaire n'est pas celui que vous croyez

Cron utilise le fuseau du système sur lequel il tourne. Sur un serveur réglé en UTC, 0 9 * * * s'exécute à 9 h UTC, soit 10 h en hiver et 11 h en été à Paris. Les planificateurs managés tournent souvent en UTC : GitHub Actions utilise toujours l'UTC, et les CronJob Kubernetes utilisent le fuseau du contrôleur sauf si vous indiquez timeZone dans la spécification.

3. Le changement d'heure

Si vous planifiez une tâche entre 2 h et 3 h du matin, le jour du changement d'heure elle peut être sautée (au printemps, cette heure n'existe pas) ou, selon l'implémentation, s'exécuter deux fois (à l'automne, elle se répète). Pour les tâches critiques, évitez ce créneau ou travaillez en UTC.

4. Les pas ne débordent pas sur l'heure suivante

*/7 * * * * ne s'exécute pas « toutes les 7 minutes » au sens strict : il tourne aux minutes 0, 7, 14… 56, puis recommence à 0 l'heure suivante. Entre la minute 56 et la minute 0, il ne s'écoule que 4 minutes. Pour des intervalles qui ne divisent pas 60, cron n'est pas le bon outil.

5. Cinq champs ou six

Le cron classique a cinq champs et une résolution d'une minute. Quartz, Spring (@Scheduled) et des bibliothèques comme node-cron ajoutent un sixième champ au début pour les secondes : 0 */5 * * * * veut dire « toutes les 5 minutes » dans Spring, mais c'est une expression invalide dans une crontab. Quand vous copiez une expression d'un système à l'autre, comptez les champs.

Comment vérifier une expression avant de déployer

La méthode la plus fiable consiste à regarder les prochaines exécutions réelles. Collez l'expression dans l'analyseur cron, choisissez 5 ou 6 champs selon votre système et vérifiez la liste des dates : si votre « premier lundi du mois » s'exécute aussi le 3, vous êtes tombé dans l'erreur numéro 1. Tout est calculé dans votre navigateur, vous pouvez donc tester autant d'expressions que vous voulez.