Générateur crontab et constructeur d'expressions cron
Construisez et décodez des expressions cron dans le navigateur. Aperçu en direct de la prochaine exécution en heure locale ou UTC. POSIX 5 champs, préréglages, description claire. Gratuit et privé.
Lisible par un humain
—
5 prochaines exécutions planifiées
Qu'est-ce qu'une expression cron ?
Une expression cron est une chaîne à cinq champs qui définit une planification récurrente. De gauche à droite, les champs sont minute (0-59), heure (0-23), jour du mois (1-31), mois (1-12) et jour de la semaine (0-6, où 0 et 7 désignent tous deux dimanche). Chaque champ accepte une valeur, une liste (`1,3,5`), une plage (`1-5`), un joker (`*` signifiant n'importe quelle valeur) ou un pas (`*/15` signifiant toutes les 15). La combinaison définit exactement quand la commande planifiée s'exécutera — `0 9 * * 1-5` se lit par exemple « à la minute 0, heure 9, n'importe quel jour du mois, n'importe quel mois, jour de la semaine du lundi au vendredi » — en français clair, « en semaine à 9 h 00 ».
Cron est né dans Unix Version 7 en 1979, et la grammaire à cinq champs est restée essentiellement inchangée pendant plus de quatre décennies — preuve de la qualité de conception de la syntaxe d'origine. Aujourd'hui, les expressions cron sont utilisées bien au-delà du fichier crontab Unix : Kubernetes CronJobs, workflows GitHub Actions, règles AWS EventBridge, pipelines planifiés GitLab CI, Cloudflare Workers Cron Triggers et les plateformes serverless de chaque cloud acceptent toutes la même grammaire à cinq champs. Apprendre cron une fois, c'est savoir planifier des tâches dans tout contexte d'infrastructure moderne.
La norme POSIX définit cinq opérateurs : `*` (n'importe quelle valeur), `,` (liste de valeurs), `-` (plage), `/` (pas) et des jetons nommés pour les mois (JAN-DEC) et les jours de la semaine (SUN-SAT). La plupart des implémentations développent aussi cinq raccourcis courants : `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) et `@hourly` (`0 * * * *`). Le planificateur Quartz (une bibliothèque Java) étend cela avec un champ secondes optionnel et des opérateurs supplémentaires (`?`, `L`, `W`, `#`) — utile si vous travaillez en Java/Spring, mais non portable vers cron standard. Cet outil suit la norme POSIX à cinq champs, car c'est la variante dominante et celle que votre serveur Linux, votre runner GitHub Actions et votre cluster Kubernetes comprendront réellement.
Une particularité du cron POSIX mérite une attention particulière : lorsque le jour du mois et le jour de la semaine sont tous deux restreints (aucun n'est `*`), la planification s'exécute si L'UN OU L'AUTRE correspond — sémantique OR, pas AND. Donc `0 0 1 * 5` s'exécute le 1er de chaque mois ET tous les vendredis, pas seulement les vendredis qui tombent un 1er. C'est la surprise cron la plus fréquente ; l'aperçu des prochaines exécutions de cet outil la rend évidente en affichant les dates et heures réelles auxquelles la planification se déclenchera. Vérifiez avant de déployer.
L'analyse et le calcul des prochaines exécutions ont lieu entièrement dans votre navigateur en JavaScript — aucune expression, planification ou autre donnée n'est jamais envoyée à un serveur. Cet outil analyse instantanément n'importe quelle expression cron POSIX standard avec une description en français clair et un aperçu de cinq exécutions, en toute confidentialité.
Les expressions cron sont étroitement liées à d'autres outils pour développeurs. Les tâches cron sont couramment déboguées en comparant les timestamps Unix aux heures d'exécution attendues, et les planifications complexes sont souvent documentées sous forme de configuration JSON qui peut être validée avec notre formateur JSON. Pour un guide approfondi couvrant la sémantique OR, les pièges de fuseau horaire et les variantes courantes de cron avec des exemples sous Linux, Kubernetes et GitHub Actions, consultez notre référence sur les planifications cron.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Fonctionnalités clés
Analyseur POSIX 5 champs en direct
Analyseur strict suivant cron POSIX : minute (0-59), heure (0-23), jour du mois (1-31), mois (1-12 ou JAN-DEC), jour de la semaine (0-6 ou SUN-SAT, 7 acceptant aussi dimanche). Tous les opérateurs standard (`*` `,` `-` `/`) et macros (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) sont pris en charge.
Aperçu des 5 prochaines exécutions
Calcule les cinq prochaines heures d'exécution planifiées à partir de votre heure locale actuelle. Basculez entre Local et UTC en un clic — le moyen le plus fiable de repérer les surprises de fuseau horaire avant de déployer un crontab sur un serveur dans une autre région.
Description en français clair
Chaque expression valide reçoit une explication lisible par un humain : « Toutes les 15 minutes », « En semaine à 9 h 00 », « À 02:30 le jour 1 du mois, en janvier et juillet ». La revue de code et le passage de relais en équipe deviennent sans effort — fini de deviner ce que fait réellement `*/5 9-17 * * 1-5`.
Messages d'erreur au niveau du champ
Les expressions invalides reçoivent un retour rouge instantané avec le champ fautif mis en évidence et une erreur spécifique : « Erreur dans minute : valeur hors plage [0, 59] : "60" ». Fini les échecs silencieux de crontab découverts trois jours plus tard quand le rapport n'a pas tourné.
Puces de préréglages pour les planifications courantes
Onze préréglages en un clic couvrent les planifications que vous utiliserez réellement : toutes les minutes, toutes les 5/15 minutes, toutes les heures, tous les jours à minuit ou 9 h, en semaine à 9 h, chaque dimanche/lundi, le premier de chaque mois et chaque année. Tapez, ajustez, expédiez.
Champs constructeur par position
Pas besoin de mémoriser l'ordre des cinq champs — cinq petits champs étiquetés Minute, Heure, Jour du mois, Mois, Jour de la semaine vous permettent d'éditer une position à la fois sans perdre une valeur ni inverser l'ordre. L'expression complète en haut se reconstruit automatiquement.
Sémantique OR POSIX gérée correctement
Lorsque le jour du mois et le jour de la semaine sont tous deux restreints, la règle OR entre en jeu — `0 0 1 * 5` s'exécute chaque 1er ET chaque vendredi. L'aperçu des prochaines exécutions rend cela visible avant le déploiement ; fini les pagers le week-end par surprise.
Confidentialité 100 % navigateur
Vos expressions cron — qui révèlent souvent le timing d'infrastructure et les motifs de planification interne — ne quittent jamais votre navigateur. Aucune donnée envoyée à un serveur, aucune journalisation, aucune analytique. Vous pouvez le vérifier dans l'onglet Réseau de votre navigateur. Sûr pour les planifications de production et les systèmes internes.
Messages d'erreur conscients de Quartz
Si vous collez une expression Quartz avec `?` `L` `W` ou `#`, l'analyseur explique « Opérateurs Quartz non pris en charge — utilisez la syntaxe POSIX » pour que vous sachiez devoir réécrire pour cron au lieu de déboguer un échec silencieux. Les planifications Quartz ne tournent pas sur cron Linux.
Variantes de cron et planificateurs
Vixie cron (défaut Linux)
POSIX 5 champsLe défaut sur la plupart des distributions Linux. POSIX strict avec extension `CRON_TZ=` pour un fuseau explicite. La sémantique OR jour du mois / jour de la semaine s'applique. Cible principale de cet outil.
BSD cron
POSIX 5 champsDéfaut sur macOS et la famille BSD. Compatible POSIX avec des différences d'implémentation mineures par rapport à vixie cron ; la plupart des expressions fonctionnent à l'identique.
Timers systemd (OnCalendar)
spec calendaire, pas cronAlternative à cron sur Linux basé sur systemd. Utilise la syntaxe `OnCalendar: 2026-*-* 09:00:00` — plus lisible pour les planifications non récurrentes mais non interopérable avec les expressions cron.
Quartz Scheduler (Java/Spring)
6 ou 7 champsAjoute des champs secondes (obligatoire) et année (optionnel), plus les opérateurs `?`, `L`, `W`, `#`. Utile pour les apps Java mais non portable vers cron Linux.
AWS EventBridge
6 champs façon Quartz avec `?`Requiert que le jour de la semaine ou le jour du mois soit `?` (convention Quartz) plutôt que `*` lorsqu'un seul est restreint. Les expressions ne se portent pas directement vers cron Linux.
Kubernetes CronJob
POSIX 5 champs + champ timeZonePlanification POSIX 5 champs plus champ `spec.timeZone` (1.27+). Plus propre que de s'appuyer sur le fuseau horaire de l'hôte du kubelet. Les expressions se portent directement depuis cron Linux.
GitHub Actions
POSIX 5 champsTourne toujours en UTC. Timing en best-effort — peut être sauté sous forte charge. Évitez les intervalles inférieurs à 15 minutes. Les expressions se portent directement depuis cron Linux.
Exemples d'expressions cron
Toutes les 15 minutes
*/15 * * * *
Opérateur de pas : `*/15` dans le champ minute signifie « toutes les 15 minutes à partir de la minute 0 » — les exécutions ont donc lieu à :00, :15, :30, :45 toutes les heures de chaque jour. C'est l'intervalle le plus courant pour interroger des API, rafraîchir des caches et exécuter des vérifications de battement de cœur.
En semaine à 9 h 00
0 9 * * 1-5
La plage `1-5` dans le champ jour de la semaine désigne du lundi au vendredi (1 = lundi, 5 = vendredi). S'exécute à exactement 09:00 — utile pour les rapports en heures ouvrées, les jobs par lots qui dépendent de données nocturnes et les rappels de daily standup.
Premier du mois à minuit
0 0 1 * *
Jour du mois `1`, tous les autres champs inférieurs à zéro. Courant pour la facturation mensuelle, la rotation des journaux et la réconciliation de fin de période. Le jour du mois et le jour de la semaine ne sont restreints en même temps que lorsqu'aucun n'est `*` — ici le jour de la semaine est `*`, donc seul le jour du mois compte.
Toutes les 5 minutes entre 9 h et 17 h, en semaine
*/5 9-17 * * 1-5
Combine un pas (`*/5`) avec une plage (`9-17`) sur des champs différents. Utile pour la supervision uniquement en heures ouvrées ou pour vider une file d'attente. Total : 12 exécutions/heure × 9 heures × 5 jours = 540 exécutions par semaine de travail.
Trimestriel : 1er janvier, avril, juillet, octobre à minuit
0 0 1 JAN,APR,JUL,OCT *
Mois nommés dans une liste séparée par des virgules. Idéal pour les planifications trimestrielles comme la clôture financière, les revues de gel de code ou les audits de conformité. Vous pouvez mélanger noms et nombres (`1,APR,7,10` s'analyse de la même façon), mais tenez-vous à un seul style pour la lisibilité.
Piège du OR POSIX : 1er du mois OU chaque vendredi
0 0 1 * 5
Lorsque LES DEUX, jour du mois (`1`) ET jour de la semaine (`5`), sont restreints, cron POSIX exécute la tâche si L'UN OU L'AUTRE correspond. Cela se déclenche donc le 1er de chaque mois ET tous les vendredis — pas seulement les vendredis tombant un 1er. C'est la surprise cron la plus fréquente ; l'aperçu des prochaines exécutions la rend évidente.
Tous les jours à 02:30 (fenêtre de faible trafic)
30 2 * * *
Valeurs précises pour l'heure et la minute, jokers ailleurs. La fenêtre 02:00-04:00 UTC est la convention de facto pour les jobs par lots nocturnes, car elle ne chevauche les heures de bureau d'aucune région d'affaires majeure. Associez-la au sélecteur UTC pour confirmer que l'exécution tombe là où vous l'attendez.
Équivalent macro : @daily
@daily
Le raccourci `@daily` (également `@midnight`) se développe en `0 0 * * *` — tous les jours à minuit. Autres macros : `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. Les macros sont concises, mais la forme à cinq champs est plus portable entre planificateurs (certains prennent en charge les macros, d'autres non).
Comment construire une expression cron
- 1
Tapez ou collez une expression cron
Saisissez une expression cron à cinq champs dans le champ ci-dessus (p. ex. `*/15 * * * *`). L'outil analyse et valide pendant que vous tapez — coche verte pour valide, erreur rouge avec nom de champ pour invalide. Les macros comme `@daily`, `@hourly`, etc. sont aussi acceptées.
- 2
Ou ajustez les cinq champs
Pas besoin de mémoriser l'ordre des champs — modifiez Minute, Heure, Jour du mois, Mois ou Jour de la semaine individuellement à l'aide des champs étiquetés. L'expression complète en haut se met à jour automatiquement. Utilisez `*` pour les jokers, `*/N` pour les pas, `a-b` pour les plages et `1,3,5` pour les listes.
- 3
Choisissez un préréglage pour démarrer
Touchez n'importe quelle puce de préréglage (Toutes les 15 minutes, En semaine à 9 h, etc.) pour charger une planification courante, puis ajustez les champs selon votre besoin précis. Onze préréglages couvrent les motifs que vous utiliserez réellement en production.
- 4
Vérifiez l'aperçu des prochaines exécutions
Regardez les cinq dates et heures d'exécution à venir — basculez entre Local et UTC pour confirmer que la planification se déclenche au moment voulu. C'est le moyen le plus fiable de repérer le piège OR jour du mois / jour de la semaine du POSIX avant qu'il ne vous morde en production.
- 5
Copiez et collez dans votre planificateur
Cliquez sur Copier pour récupérer l'expression. Collez-la dans votre crontab, votre timer systemd, le `cron:` GitHub Actions, AWS EventBridge, le `schedule` Kubernetes CronJob ou n'importe quel planificateur compatible cron. N'oubliez pas de vérifier le fuseau horaire du planificateur cible — voir la section Bonnes pratiques ci-dessous.
Erreurs cron courantes
Piège OR POSIX : les deux champs jour restreints
Lorsque LE jour du mois ET le jour de la semaine sont tous deux restreints, cron POSIX exécute la tâche si L'UN OU L'AUTRE correspond — pas les deux. Donc `0 0 1 * 5` se déclenche le 1er de chaque mois ET tous les vendredis, pas seulement les vendredis-qui-tombent-un-1er. Utilisez `*` dans l'un des deux champs jour lorsque vous voulez une condition unique, ou écrivez un script wrapper qui effectue le contrôle AND.
# Intention : « premier vendredi du mois » 0 0 1-7 * 5 # En réalité : se déclenche les jours 1-7 du mois OU chaque vendredi — les deux conditions
# Utilisez un wrapper pour une vraie sémantique AND 0 0 * * 5 [ $(date +\%d) -le 7 ] && /votre-script # OU laissez tomber une condition et acceptez la planification plus large
Dérive de fuseau horaire entre dev et prod
Les planifications cron sur un serveur Linux utilisent le fuseau horaire système, pas le fuseau local de celui qui écrit. Un cron à 9 h 00 sur un serveur réglé en UTC se déclenche à 4 h 00 US East. Concevez toujours les planifications par rapport au fuseau du serveur cible — de préférence UTC — et verrouillez le fuseau explicitement avec `CRON_TZ=...` en haut du crontab.
# Écrit par un dev US East, déployé sur un serveur UTC 0 9 * * * /votre-rapport.sh # Se déclenche à 9 h UTC = 4 h US East — pas ce que le dev voulait
# Verrouillez le fuseau, ou écrivez explicitement en UTC CRON_TZ=America/New_York 0 9 * * * /votre-rapport.sh
Confusion sur l'opérateur de pas : « */15 » vs « 15 »
`*/15` dans minute signifie « toutes les 15 minutes à partir de 0 » (donc 0, 15, 30, 45). Juste `15` signifie « uniquement à la minute 15 » — une exécution par heure. Les débutants écrivent fréquemment `15` en pensant que c'est toutes les 15 minutes ; la description en français clair de l'outil rend l'erreur évidente avant le déploiement.
# Intention : toutes les 15 minutes 15 * * * * # En réalité : une fois par heure, à la minute 15 (4 exécutions/heure de moins que voulu)
# Correct */15 * * * * # Toutes les 15 minutes : minute 0, 15, 30, 45 de chaque heure
Expression à six champs sur un planificateur POSIX
Quartz/Spring/node-cron prennent en charge un champ secondes optionnel en première position. Le crontab Linux, GitHub Actions, AWS EventBridge (principalement) et Kubernetes CronJob NE LE FONT PAS — ils attendent cinq champs. Coller une expression à six champs casse silencieusement la planification : vos secondes deviennent des minutes, les minutes deviennent des heures, etc.
# 6 champs Quartz copiés dans un crontab Linux 0 0 9 * * 1-5 # Linux lit : minute=0, heure=0, jour=9, mois=*, jour-de-la-semaine=1-5 # = minuit les jours 9 dans les mois correspondant à des jours de la semaine — chaos
# POSIX 5 champs, retirez les secondes 0 9 * * 1-5 # = en semaine à 9 h 00
Jour du mois hors plage pour le mois
Cron ne valide pas le jour du mois par rapport au mois réel. `0 0 31 2 *` (31 février) s'analyse correctement mais ne correspond jamais — février compte au plus 29 jours. Les débutants supposent que l'analyseur va détecter cela ; il ne le fait pas. L'aperçu des prochaines exécutions de cet outil affiche « Aucune exécution à venir » lorsqu'une expression est structurellement valide mais logiquement impossible.
# 30 ou 31 février — ne s'exécute jamais 0 0 30 2 * 0 0 31 2 * # S'analyse mais aucune planification ne se déclenche jamais
# Utilisez un motif « dernier jour ouvré de février » via script 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /votre-script
Confondre la syntaxe Quartz avec POSIX
Les docs AWS, les tutoriels Spring et de nombreuses réponses Stack Overflow montrent des expressions cron Quartz avec `?`, `L`, `W` ou `#`. Cela ne fonctionne pas dans crontab Linux. Si vous copiez une expression à six champs avec `?` à la position jour de la semaine, l'analyseur Linux la rejettera (ou pire, l'analysera silencieusement de travers). Cet outil attrape les opérateurs Quartz et explique la différence.
# Quartz : « dernier vendredi du mois » — invalide en POSIX 0 0 ? * 6L *
# Approche wrapper POSIX pour dernier-vendredi 0 0 25-31 * 5 /votre-script # S'exécute le vendredi entre le 25 et le 31 de n'importe quel mois
Cas d'usage courants
- Tâches crontab Linux
- Construisez et vérifiez des entrées pour `/etc/crontab`, `/etc/cron.d/*` ou les fichiers `crontab -e` par utilisateur. Utilisez l'aperçu des prochaines exécutions pour confirmer que la planification tombe à la bonne heure dans le fuseau configuré de votre serveur avant d'enregistrer.
- Planifications Kubernetes CronJob
- Générez le champ `spec.schedule` pour un Kubernetes CronJob. Kubernetes 1.27+ prend aussi en charge `spec.timeZone` — utilisez le sélecteur UTC pour concevoir votre planification en UTC, puis définissez explicitement `timeZone` afin d'éviter l'heure locale du nœud worker.
- Workflows planifiés GitHub Actions
- Construisez l'entrée `cron:` sous `on.schedule`. GitHub Actions tourne toujours en UTC — basculez l'aperçu en UTC pour confirmer votre planification. Évitez les intervalles inférieurs à 15 minutes ; le planificateur de GitHub saute les jobs à intervalle court sous charge.
- Règles AWS EventBridge
- Composez l'expression cron pour une règle EventBridge planifiée. Note : AWS utilise une syntaxe à six champs façon Quartz avec `?` pour le jour de la semaine — cet outil émet du POSIX à cinq champs, que vous devrez convertir en préfixant les secondes (`0`) et en remplaçant le `*` dans l'un des champs jour par `?`.
- Pipelines planifiés GitLab CI
- Vérifiez l'expression cron pour un pipeline CI planifié dans GitLab. GitLab utilise la syntaxe POSIX à cinq champs — ce qu'émet cet outil — et un sélecteur de date dans l'interface, mais la forme cron vous donne un contrôle plus fin pour les intervalles non standard.
- Cloudflare Workers Cron Triggers
- Construisez l'entrée `[triggers.crons]` dans `wrangler.toml`. Cloudflare utilise la syntaxe POSIX à cinq champs. L'intervalle minimum est d'une minute ; le worker tourne en UTC. Utilisez l'aperçu pour vérifier que le déclencheur se déclenche dans la fenêtre attendue.
- Planifications Node.js node-cron
- Construisez des expressions pour la bibliothèque `node-cron`, qui prend en charge à la fois POSIX à cinq champs et un champ secondes optionnel en tête. Tenez-vous à cinq champs sauf si vous avez spécifiquement besoin d'une précision inférieure à la minute — les expressions à six champs ne se portent pas vers crontab Linux.
- Revue de code et documentation
- Collez une expression cron d'une PR ou d'un runbook pour voir instantanément ce qu'elle fait — fini les devinettes sur `30 7 * * 1-5` ou la sortie d'une fiche de référence. La description en français clair est aussi excellente pour les commentaires en ligne et les fichiers README.
Référence de la syntaxe cron
- Ordre des champs : M H J M S
- Minute (0-59), Heure (0-23), Jour du mois (1-31), Mois (1-12), Jour de la semaine (0-6, 7 = dimanche aussi). Moyen mnémotechnique : « Ma Hauteur Joue Mal sur Sa scène ». Le champ jour de la semaine accepte à la fois les jetons numériques (0-6) et nommés (SUN-SAT, insensible à la casse).
- Opérateurs
- `*` = n'importe quelle valeur ; `,` = séparateur de liste (`1,3,5`) ; `-` = plage (`1-5`) ; `/` = pas (`*/15`, `5/10`) ; noms : JAN-DEC pour le mois, SUN-SAT pour le jour de la semaine (insensible à la casse).
- Macros (alias)
- `@yearly` = `0 0 1 1 *` ; `@annually` = `0 0 1 1 *` ; `@monthly` = `0 0 1 * *` ; `@weekly` = `0 0 * * 0` ; `@daily` = `0 0 * * *` ; `@midnight` = `0 0 * * *` ; `@hourly` = `0 * * * *`. `@reboot` est une non-planification spéciale (s'exécute uniquement au démarrage) et est rejetée avec un message d'erreur explicatif.
- Sémantique du jour POSIX (règle OR)
- Lorsque LE jour du mois ET le jour de la semaine sont restreints (aucun n'est `*`), la planification s'exécute si L'UN OU L'AUTRE correspond — sémantique OR. Lorsqu'un seul est restreint, c'est lui qui décide. Lorsque les deux sont `*`, chaque jour correspond. Cette règle OR s'applique à vixie cron, BSD cron et à la plupart des implémentations POSIX ; Quartz utilise `?` pour distinguer AND et OR.
- Mode six champs (Quartz allégé)
- Si votre entrée contient six jetons séparés par des espaces, l'outil traite le premier comme un champ secondes (0-59). Utile pour Quartz, `@Scheduled(cron=...)` de Spring et node-cron. NON portable vers crontab Linux ou les planificateurs POSIX — ils traiteraient vos secondes comme des minutes et décaleraient tout d'une position.
- Ancrage de l'opérateur de pas
- `*/N` est ancré à la plus petite valeur du champ : `*/15` dans minute = `0,15,30,45`, et non « toutes les 15 à partir de maintenant ». Avec une base non joker : `5/15` dans minute = `5,20,35,50`. Les valeurs de pas qui ne divisent pas la plage uniformément sauteront près du bouclage — c'est correct, pas un bug.
- Bornes de validation
- minute ∈ [0,59], heure ∈ [0,23], jour du mois ∈ [1,31], mois ∈ [1,12], jour de la semaine ∈ [0,7]. Les valeurs hors plage produisent une erreur au niveau du champ. Le jour du mois N'EST PAS validé par rapport au mois (`0 0 31 2 *` s'analyse correctement mais ne correspond jamais, car février n'a pas de jour 31 — l'aperçu des prochaines exécutions affichera « Aucune exécution à venir »).
- Opérateurs Quartz rejetés
- Le cron POSIX ne prend pas en charge les opérateurs Quartz `?` (aucune valeur spécifique), `L` (dernier), `W` (jour ouvré le plus proche) ou `#` (nième jour de semaine). Cet outil les rejette avec un message clair « Opérateurs Quartz non pris en charge » plutôt que de les analyser silencieusement comme du POSIX invalide. Pour les planifications Quartz, utilisez un outil compatible Quartz ou le scheduler Spring.
- Limite annuelle sur la recherche des prochaines exécutions
- Le calcul des prochaines exécutions cherche jusqu'à 4 ans en avant ; les expressions qui correspondent moins souvent (p. ex. les motifs « 29 février ») afficheront « Aucune exécution à venir dans les 4 prochaines années ». C'est par conception, pour éviter une itération non bornée sur des motifs impossibles.
Bonnes pratiques pour les planifications cron
- Utilisez UTC sur les serveurs, convertissez à l'affichage
- Réglez vos serveurs en UTC (`/etc/timezone` ou `TZ=UTC`) et écrivez toutes les expressions cron en UTC. Convertissez en heure locale uniquement à l'affichage, dans vos tableaux de bord et rapports. Cela élimine toute une catégorie de bugs de fuseau horaire qui frappent le plus fort pendant les transitions d'heure d'été, lorsque les planifications en heure locale se déclenchent silencieusement deux fois ou sautent une exécution. Utilisez le sélecteur UTC de cet outil pour concevoir votre planification en UTC dès le départ.
- Évitez le piège OR jour du mois / jour de la semaine du POSIX
- Ne restreignez jamais à la fois le jour du mois ET le jour de la semaine sauf si vous voulez la sémantique OR. Si vous voulez « tous les lundis de janvier », écrivez `0 0 * 1 1` (le jour du mois est `*`) ; si vous voulez « le 1er de chaque mois », écrivez `0 0 1 * *` (le jour de la semaine est `*`). La règle OR du POSIX signifie que `0 0 1 * 1` s'exécute le 1er ET tous les lundis — presque certainement pas ce que vous vouliez. L'aperçu des prochaines exécutions repérera cela si vous vérifiez avant de déployer.
- Verrouillez explicitement le fuseau horaire de la planification
- Les planificateurs modernes prennent en charge le fait de figer le fuseau horaire dans la définition de planification : `CRON_TZ=America/New_York` en haut d'un crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` pour les Kubernetes CronJobs 1.27+, expression de planification avec `ScheduleExpressionTimezone` pour AWS EventBridge Scheduler. Verrouillez le fuseau explicitement plutôt que de vous appuyer sur le défaut du serveur — les fuseaux horaires des serveurs peuvent changer sans préavis lors des migrations d'infrastructure.
- Répartissez la charge sur les minutes, pas à :00
- Évitez `0 * * * *` (toutes les heures à la minute 0) pour les jobs non critiques — à grande échelle, planifier de nombreuses choses exactement à :00 crée des pics de charge. Choisissez un décalage de minute aléatoire (`23 * * * *`, `41 * * * *`) pour chaque job afin de répartir la charge. La même règle s'applique aux jobs quotidiens : `30 3 * * *` est plus doux pour votre base de données que `0 3 * * *` quand de nombreux jobs convergent à 3 h 00.
- Rendez les jobs idempotents
- Cron n'a pas de retentative intégrée, pas de prévention de chevauchement, pas de récupération d'exécution manquée. Votre job doit être sûr à exécuter plusieurs fois (idempotent) et auto-vérifiant. Au lieu de « envoyer le rapport à 9 h », concevez-le comme « envoyer le rapport du jour s'il n'a pas déjà été envoyé » — il s'auto-répare après une panne, une double planification accidentelle et les exécutions concurrentes. L'idempotence est une propriété du job, pas du planificateur, et c'est la pratique de fiabilité la plus importante.
- Ajoutez un battement de cœur pour les planifications critiques
- Le mode d'échec silencieux de cron est sa plus grande faiblesse — si la planification ne se déclenche pas, rien ne vous le dit. Pour les jobs critiques, faites en sorte que le job ping un service de battement de cœur (Healthchecks.io, Cronitor, Dead Man's Snitch) à la fin de chaque exécution ; le service vous alerte si le ping attendu n'arrive pas. Cela attrape à la fois l'échec du job et un mauvais déclenchement de la planification elle-même. Le palier gratuit couvre la plupart des besoins personnels et de petites équipes.
- Vérifiez avec l'aperçu des prochaines exécutions avant d'expédier
- Avant de déployer une nouvelle planification cron, regardez les cinq dates et heures d'exécution à venir dans l'aperçu de cet outil. Basculez entre Local et UTC. Confirmez que la planification tombe quand vous le voulez — pas cinq minutes trop tôt, pas le mauvais jour, sans sauter le week-end qui vous importait. L'aperçu est le test de production le moins cher possible.
Questions fréquentes
Que fait cet outil ?
Qu'est-ce qu'une expression cron ?
Mes données sont-elles téléversées quelque part ?
Quelle est la différence entre cron POSIX et Quartz ?
Pourquoi « 0 0 1 * 5 » s'exécute-t-il chaque vendredi ET le 1er ?
Comment lancer un job toutes les 30 secondes ?
Quel fuseau horaire utilise cron ?
À quoi « */15 » se développe-t-il réellement ?
Puis-je utiliser une expression à six champs avec des secondes ?
Quel est l'intervalle maximal que cron peut exprimer ?
Comment gérer les exécutions manquées après une panne ?
Pourquoi mon cron GitHub Actions ne s'exécute-t-il pas à l'heure ?
Outils connexes
Voir tous les outils →Convertisseur Timestamp Unix & Epoch — Multi-Précision
Date et heure
Convertissez les timestamps Unix en dates instantanément. Détection auto secondes, millisecondes, microsecondes. Horloge epoch en direct. Gratuit et privé.
Convertisseur de Base — Binaire, Hex, Décimal & Octal
Outils de conversion
Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.
Décodeur et Encodeur Base64
Encodage et formatage
Décodez et encodez en Base64 en ligne gratuitement. Conversion en temps réel, support UTF-8 et émojis. 100 % privé, dans votre navigateur.
Convertisseur CSV vers JSON
Encodage et formatage
Convertissez du CSV en JSON dans le navigateur. RFC 4180, inférence de types, ligne d'en-tête, sûr pour grands entiers. 100 % privé, sans envoi.
Compressez vos Images JPEG, PNG & WebP en Ligne
Outils de conversion
Compressez vos images JPEG, PNG et WebP gratuitement dans le navigateur. Lots de 20 images, qualité réglable, comparaison avant/après. 100 % privé.
JSON Diff (Comparateur)
Encodage et formatage
Comparez deux fichiers JSON instantanément dans votre navigateur. Vue côte à côte, sortie JSON Patch RFC 6902, ignorer les champs bruyants comme les horodatages et les ID. 100% privé, aucun envoi.