Calculer les prochaines exécutions d'une expression cron
- Tableau de bord
- Documentation
- API
Qu'est-ce qu'une expression cron ?
Une expression cron est une chaîne courte qui décrit une récurrence dans le temps. Le
format hérité d'Unix tient en cinq champs séparés par des espaces : minute, heure,
jour du mois, mois et jour de la semaine. Cette syntaxe est née avec le démon
cron de Brian Kernighan dans les années 1970, puis généralisée par le Vixie cron
(1987) repris par toutes les distributions Linux et macOS modernes. Aujourd'hui, la même syntaxe se
retrouve dans la majorité des planificateurs cloud (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Apps) et CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── 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)
│ │ │ │ │
* * * * *
Une expression cron bien formée définit donc un cron schedule précis : chaque champ peut être une valeur fixe, une plage, une liste, un pas ou un astérisque qui matche tout. La compacité de la crontab expression est sa force, mais c'est aussi ce qui rend un cron decoder indispensable pour valider visuellement l'intention. C'est tout l'objet de ce cron converter : produire une explication cron lisible, plus la liste des prochaines exécutions.
Anatomie d'une expression cron
Les cinq champs partagent une grammaire commune. Voici les bornes acceptées par chaque colonne d'une expression crontab standard :
- Minute :
0-59. - Heure :
0-23, format 24h. - Jour du mois :
1-31. - Mois :
1-12ou les abréviations textuellesJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Jour de la semaine :
0-7où0et7représentent tous deux dimanche, ou les abréviationsSUN,MON,TUE,WED,THU,FRI,SAT.
Caractères spéciaux partagés par les cinq champs :
*: any value, matche toutes les valeurs autorisées du champ.,: liste discrète, par exemple1,15,30dans le champ minute.-: plage inclusive, par exemple9-17pour les heures de bureau./: pas (step), par exemple*/15= toutes les 15 unités, ou0-30/5= toutes les 5 minutes entre 0 et 30.
Extensions Quartz (Java, AWS EventBridge, Spring) : la grammaire grimpe à 6 ou 7
champs avec une colonne secondes en tête (0-59) et parfois une colonne
année en queue (1970-2099). Quartz introduit aussi ? (no specific
value, pour découpler jour-du-mois et jour-de-la-semaine), L (last : dernier jour du mois,
ou dernier vendredi avec 5L), W (jour ouvré le plus proche) et #
(N-ième jour de la semaine du mois, par exemple 2#3 pour le 3ème lundi). Une expression
Quartz n'est en général pas compatible avec un crontab UNIX, et vice versa : c'est la principale
source d'erreur quand on copie une cron expression d'une plateforme à l'autre.
# UNIX / Vixie cron (5 champs)
0 9 * * 1-5
# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI
# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026
Pourquoi décoder une expression cron ?
Lire 0 0 * * * est rapide. Lire */7 2-5 1,15 * 1-5 l'est nettement moins. Quand
une expression sort du trivial, le risque d'erreur d'interprétation grimpe et la cron decode
devient une étape de revue à part entière.
- Debug production : comprendre pourquoi une tâche s'est déclenchée à 03h17 et pas à 03h00, ou identifier un chevauchement entre deux jobs.
- Code review : valider qu'un planificateur poussé en pull request fait bien ce que l'auteur prétend, sans devoir mémoriser la sémantique de chaque symbole.
- Audit de planificateurs : passer en revue les cron jobs Linux dans
/etc/crontabet/etc/cron.d/, les triggers Jenkins, lesspec.schedulede Kubernetes CronJob, les règles AWS EventBridge et les jobs GCP Cloud Scheduler. - Migration legacy : reprendre un
/etc/crontabhistorique sans documentation et reconstruire la cartographie des tâches avant un changement d'infrastructure. - Onboarding : permettre à un nouveau développeur de relire une crontab sans avoir à apprendre tous les caractères spéciaux du jour au lendemain.
Comment utiliser le cron decoder
La marche à suivre pour décoder une expression crontab avec l'outil :
- Collez votre cron expression dans le champ de saisie (5 champs séparés par des espaces).
- Indiquez le nombre de prochaines exécutions à calculer.
- Cliquez sur convert pour lancer le cron decode : l'outil renvoie une phrase humaine qui explique le déclenchement, plus la liste datée des prochaines exécutions.
- Vérifiez visuellement que les dates correspondent à votre intention (heure, jour, fréquence).
- Copiez la sortie via le bouton de copie pour la coller dans un ticket, une PR ou une documentation technique.
L'outil ne se contente pas d'un parsing syntaxique : il fournit une explication cron en langage naturel, ce qui en fait à la fois un cron decoder et un valideur de planning.
Exemples classiques de cron expression
Les motifs ci-dessous couvrent l'essentiel des cron schedules rencontrés en production. Ils sont tous valides sur Linux crontab, Kubernetes CronJob, GitHub Actions et la majorité des planificateurs applicatifs.
| Expression | Lecture humaine |
|---|---|
* * * * * |
Toutes les minutes |
0 * * * * |
Toutes les heures pile |
0 0 * * * |
Tous les jours à minuit |
0 0 * * 0 |
Tous les dimanches à minuit |
*/15 * * * * |
Toutes les 15 minutes |
0 9 * * 1-5 |
9h00 du lundi au vendredi |
0 0 1 * * |
Le 1er de chaque mois à minuit |
0 0,12 * * * |
À minuit et midi tous les jours |
*/5 9-17 * * 1-5 |
Toutes les 5 minutes en heures ouvrées |
30 2 1,15 * * |
Le 1er et le 15 du mois à 2h30 |
Pour exécuter une tâche cron sur un serveur Linux, on édite la crontab utilisateur depuis le shell :
# éditer la crontab de l'utilisateur courant
$ crontab -e
# lister les tâches existantes
$ crontab -l
# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Exemple de sortie du cron converter pour */5 * * * * :
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Questions fréquentes sur le cron decoder
Quelle différence entre cron UNIX et Quartz ?
UNIX/Vixie cron utilise 5 champs (minute à jour-de-la-semaine), sans précision à la seconde, et n'a pas
de notion native de « dernier jour du mois ». Quartz (Java, Spring, AWS EventBridge) ajoute une colonne
secondes en tête, parfois une colonne année en queue, et plusieurs symboles
(?, L, W, #) absents de la crontab Linux. Une
expression cron Quartz à 6 champs n'est donc pas directement portable vers
/etc/crontab, et inversement. Notre cron decoder cible le format à 5
champs, qui couvre la majorité des planificateurs.
Comment exécuter une tâche cron toutes les 5 minutes ?
Avec le pas / sur le champ minute :
*/5 * * * * /usr/local/bin/check-health.sh
Cette crontab expression déclenche le script aux minutes 0, 5, 10, 15... de chaque
heure, tous les jours. Pour limiter aux heures ouvrées du lundi au vendredi, ajoutez les contraintes
sur les champs heure et jour-de-la-semaine : */5 9-17 * * 1-5.
Que veut dire l'astérisque (*) dans une expression cron ?
L'astérisque signifie any value : il matche toutes les valeurs autorisées du champ. Dans
0 0 * * *, les trois étoiles veulent dire « n'importe quel jour du mois, n'importe quel
mois, n'importe quel jour de la semaine ». Combiné aux deux premiers champs fixés à 0, on
obtient « tous les jours à minuit ». L'étoile peut aussi se combiner à un pas : */15 en
minute = toutes les 15 minutes.
Crontab a-t-il un fuseau horaire ?
Par défaut, le fuseau du serveur. Sur un crontab Linux, c'est la TZ système (souvent UTC sur les VPS et
les conteneurs). GitHub Actions force UTC. Kubernetes CronJob utilise le fuseau du contrôleur,
configurable via spec.timeZone depuis la 1.27. AWS EventBridge évalue les expressions en
UTC. Les planificateurs applicatifs (Symfony Scheduler, Quartz, Airflow) permettent souvent de fixer un
fuseau dédié à chaque tâche. En cas de doute, vérifiez date sur le serveur cible et
comparez à la sortie du cron converter.
Cron job vs commande at : laquelle choisir ?
cron sert à exécuter une tâche récurrente selon un planning. at sert
à exécuter une commande une seule fois à un instant donné. Pour une sauvegarde quotidienne,
une rotation de logs ou un appel d'API régulier, utilisez cron. Pour différer une opération unique
(« relance ce déploiement à 22h ce soir »), utilisez at :
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Comment tester une expression cron sans la déclencher ?
C'est précisément le rôle de ce cron converter : il calcule les N prochaines
exécutions à partir de l'instant courant, sans démarrer aucun job. Vous voyez immédiatement si votre
crontab expression tire à 03h00 comme prévu ou à 03h17 par accident. Pour aller plus
loin avant d'installer la tâche, vous pouvez aussi tester le script seul (bash -x script.sh)
et vérifier la syntaxe d'un fichier crontab avec crontab -T fichier sur les distributions
qui le supportent.
Que se passe-t-il si jour-du-mois et jour-de-la-semaine sont tous deux fixés ?
Sur Vixie cron (Linux), la règle est un OU logique : le job tire si l'un ou
l'autre des deux champs matche. C'est contre-intuitif et source de bugs. Quartz utilise un
ET, d'où l'introduction du symbole ? pour signaler explicitement « pas de
contrainte ». En règle générale, ne fixez qu'un seul des deux champs.
Exemple de requête
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Schéma d'entrée
| Champ | Type | Requis | Défaut |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Points d'accès
GET https://cdrn.fr/api/v1/tools- liste tous les outils disponiblesGET https://cdrn.fr/api/v1/tools/cron-converter- récupère le schéma de cet outilPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- exécute cet outil avec un payload JSON