Composez une expression cron à partir d'options simples, sans mémoriser la syntaxe.
Expression cron
0 2 * * *Quotidien — 02:00
Comprendre les cinq champs
Une expression cron comporte cinq champs dans un ordre fixe : minute, heure, jour du mois, mois et jour de la semaine. L'astérisque signifie « toutes les valeurs », un nombre fixe une valeur précise et */N signifie « toutes les N ». Ainsi 30 2 * * 1 s'exécute à 02h30 chaque lundi.
Deux détails piègent souvent. Pour le jour de la semaine, dimanche vaut 0 (et 7 dans la plupart des implémentations), donc lundi vaut 1. Et si vous renseignez à la fois le jour du mois et le jour de la semaine, la plupart des démons cron exécutent la tâche dès que l'un des deux correspond, pas les deux — laissez donc l'un des champs en astérisque, sauf si c'est le comportement voulu.
Pourquoi `0 0 13 * 5` ne veut pas dire vendredi 13
Une expression cron, ce sont cinq champs décrivant quand une commande s'exécute. L'essentiel est évident une fois vu. Deux choses ne le sont pas : comment les champs de jour se combinent, et sur quoi un pas avance réellement. Les deux produisent discrètement des planifications qui se déclenchent bien plus souvent que voulu.
Comment ça marche
- Construit l'expression à cinq champs — minute, heure, jour du mois, mois, jour de la semaine — à partir de choix simples.
- Affiche les prochaines exécutions, seul moyen fiable de confirmer qu'une expression signifie ce que vous croyez.
- Rend visible l'interaction entre jour du mois et jour de la semaine au lieu de la laisser découvrir en production.
┌─ minute 0–59 │ ┌─ heure 0–23 │ │ ┌─ jour du mois 1–31 │ │ │ ┌─ mois 1–12 │ │ │ │ ┌─ jour de la semaine 0–6 (dimanche = 0) * * * * * si jour du mois ET jour de la semaine sont tous deux restreints, cron s'exécute sur L'UN OU L'AUTRE
Exemple chiffré
Deux expressions que presque tout le monde lit de travers la première fois.
- `0 0 13 * 5` se lit comme "minuit le vendredi 13"
- les deux champs de jour sont restreints, donc cron les combine par OU
- en réalité, cela s'exécute le 13 de chaque mois ET chaque vendredi — environ 64 fois par an, pas une ou deux
- `0 0 */7 * *` se lit comme "tous les sept jours"
- le pas s'applique dans la plage 1–31, donnant les 1, 8, 15, 22 et 29
La seconde expression se réinitialise chaque mois : l'écart du 29 au 1er suivant est de trois jours dans un mois de 31 jours, pas de sept. Aucune des deux n'est hebdomadaire. `0 0 * * 5` est la façon de dire chaque vendredi.
Lire le résultat
- La règle du OU ne s'applique que si les deux champs de jour sont restreints. Si l'un vaut `*`, l'autre se comporte normalement — d'où un piège qui reste caché jusqu'à ce que quelqu'un remplisse les deux.
- Les pas comptent toujours depuis le début de la plage, pas depuis aujourd'hui. `*/7` dans un champ commençant à 1 tombe sur 1, 8, 15, 22, 29 quel que soit le jour du déploiement.
- Cron utilise le fuseau du système ou du démon. Une tâche à 02:30 peut s'exécuter deux fois ou pas du tout les jours de changement d'heure ; planifier hors de 01:00–03:00 supprime la question.
- `0` et `7` désignent tous deux dimanche dans le champ jour de la semaine sur la plupart des implémentations, et les noms comme `MON` ou `JAN` sont largement mais pas universellement pris en charge.
Questions fréquentes
- Comment planifier vraiment quelque chose tous les sept jours ?
- Utilisez un jour de semaine : `0 0 * * 5` pour chaque vendredi. Si vous avez réellement besoin d'un intervalle fixe de sept jours indépendant du calendrier, cron est le mauvais outil — une tâche qui se replanifie elle-même, ou un minuteur à intervalle monotone, l'exprime correctement.
- Que se passe-t-il le 31 dans un mois court ?
- Rien. Cron ne bascule pas sur le 1er, donc `0 0 31 * *` saute silencieusement février, avril, juin, septembre et novembre. Pour du travail de fin de mois, planifiez le 1er et regardez en arrière.