Skip to content

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é.

Sans pistage Fonctionne dans le navigateur Gratuit
Toute l'analyse et le calcul des prochaines exécutions ont lieu localement dans votre navigateur. Aucune donnée n'est envoyée à un serveur.

Champs
Préréglages

Lisible par un humain

5 prochaines exécutions planifiées

Fuseau horaire pour l'aperçu des prochaines exécutions
    Examiné pour la conformité POSIX 5 champs, l'exactitude de la sémantique OR, l'ancrage de l'opérateur de pas, le développement des jetons nommés et le rejet des opérateurs Quartz avec des erreurs utiles — Équipe d'ingénierie Go Tools · 20 mai 2026

    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 champs

    Le 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 champs

    Dé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 cron

    Alternative à 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 champs

    Ajoute 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 timeZone

    Planification 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 champs

    Tourne 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. 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. 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. 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. 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. 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.

    ✗ Incorrect
    # 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
    ✓ Correct
    # 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.

    ✗ Incorrect
    # É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
    ✓ Correct
    # 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.

    ✗ Incorrect
    # 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
    # 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.

    ✗ Incorrect
    # 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
    ✓ Correct
    # 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.

    ✗ Incorrect
    # 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
    ✓ Correct
    # 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.

    ✗ Incorrect
    # Quartz : « dernier vendredi du mois » — invalide en POSIX
    0 0 ? * 6L *
    ✓ Correct
    # 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 ?
    Il analyse, valide et explique les expressions cron dans votre navigateur, avec un aperçu en direct des cinq prochaines exécutions planifiées dans votre fuseau horaire ou en UTC. Saisissez n'importe quelle expression cron POSIX à cinq champs — ou utilisez les puces de préréglage et les champs par position pour en construire une sans mémoriser la syntaxe — et l'outil produit une description en français clair (« Toutes les 15 minutes », « En semaine à 9 h 00 », etc.) ainsi que les dates et heures réelles auxquelles la tâche se déclenchera. Les expressions erronées sont signalées instantanément par un message d'erreur au niveau du champ, ce qui évite de gaspiller un déploiement sur une planification cassée. Tout l'outil tourne à 100 % côté client : rien n'est téléversé, journalisé ni stocké — sûr pour les crontabs de production et les planifications internes avec des motifs temporels sensibles.
    Qu'est-ce qu'une expression cron ?
    Une expression cron est une chaîne à cinq champs qui définit une planification récurrente. 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 (`*` = n'importe lequel) ou un pas (`*/15` = toutes les 15). La combinaison des cinq champs définit exactement quand la commande planifiée doit s'exécuter. Cron est né dans Unix V7 (1979) et reste le langage de facto pour la planification de tâches basées sur le temps sous Linux/Unix, dans l'orchestration de conteneurs (Kubernetes CronJobs), en CI/CD (GitHub Actions, GitLab CI) et sur les plateformes serverless (AWS EventBridge, Cloudflare Workers Cron Triggers). Malgré de nombreuses alternatives proposées au fil des décennies, aucun remplaçant n'a réussi à détrôner la grammaire concise et expressive à cinq champs de cron.
    Mes données sont-elles téléversées quelque part ?
    Non. Toute l'analyse, la validation et le calcul des prochaines exécutions se font à 100 % côté client dans votre navigateur en JavaScript. Vos expressions ne sont jamais transmises, jamais stockées sur un serveur, jamais journalisées et jamais analysées. Cela rend l'outil sûr pour les crontabs de production, les motifs de planification interne qui révèlent le timing d'une infrastructure et toute planification sensible. Vous pouvez le vérifier dans l'onglet Réseau de votre navigateur — taper une expression cron déclenche zéro requête réseau. L'outil n'utilise aucun cookie pour les données saisies et aucun outil d'analytique tiers qui capturerait ce que vous tapez.
    Quelle est la différence entre cron POSIX et Quartz ?
    Cron POSIX est le standard à cinq champs utilisé par crontab Unix/Linux, les timers systemd, GitHub Actions, GitLab CI, AWS EventBridge, Kubernetes CronJobs et la plupart des planificateurs. Quartz est une bibliothèque de planification Java qui ajoute un champ secondes (six ou sept champs au total) plus des opérateurs supplémentaires : `?` (aucune valeur spécifique, utilisé quand jour du mois et jour de la semaine entrent en conflit), `L` (dernier — dernier jour du mois, dernier vendredi, etc.), `W` (jour ouvré le plus proche) et `#` (nième jour de semaine du mois, p. ex. `2#1` = premier mardi). Cet outil implémente cron POSIX, car il est de loin le plus utilisé ; les opérateurs Quartz sont signalés comme erreurs de syntaxe avec un message clair « Opérateurs Quartz non pris en charge ». Si vous avez besoin de Quartz, des planificateurs Java populaires comme Quartz Scheduler et `@Scheduled` de Spring sont votre cible — mais les définitions de planification ne se portent pas directement vers cron Linux.
    Pourquoi « 0 0 1 * 5 » s'exécute-t-il chaque vendredi ET le 1er ?
    C'est la sémantique OR entre jour du mois et jour de la semaine du cron POSIX, et c'est la surprise cron la plus fréquente. La règle : lorsque LES DEUX champs sont restreints (aucun n'est `*`), cron exécute la tâche si L'UNE OU L'AUTRE des conditions correspond — pas les deux. Donc `0 0 1 * 5` (jour du mois = 1, jour de la semaine = 5) se déclenche le 1er de chaque mois ET tous les vendredis, pas uniquement les vendredis qui tombent un 1er. Si vous ne vouliez que ce dernier cas (sémantique AND — vendredi le 1er), vous ne pouvez pas l'exprimer en cron standard ; il faudrait un script qui s'exécute chaque vendredi OU le 1er et sort tôt selon la date réelle. Vixie cron (le défaut GNU/Linux), BSD cron et AWS EventBridge suivent tous cette règle OR. L'aperçu des prochaines exécutions de cet outil rend la planification réelle évidente — collez les expressions douteuses et vérifiez avant de déployer.
    Comment lancer un job toutes les 30 secondes ?
    Vous ne pouvez pas, avec le cron POSIX standard. La granularité minimale de cron est d'une minute — le plus petit champ est minute (0-59). Pour des planifications inférieures à la minute, vos options sont : (1) Lancer deux jobs à `* * * * *` et `* * * * *` avec `sleep 30 &&` devant l'un d'eux — grossier mais fonctionnel pour vixie cron. (2) Utiliser un planificateur prenant en charge les secondes comme Quartz, un Kubernetes CronJob avec un contrôleur personnalisé, ou des timers systemd avec `OnCalendar: *-*-* *:*:00/30`. (3) Lancer un démon de longue durée qui dort 30 secondes entre les itérations — la bonne réponse pour la plupart des besoins de supervision. (4) Passer à un déclencheur événementiel (webhook, file de messages) si vous avez réellement besoin de réponse en temps réel. Le motif cron à 30 secondes est presque toujours un signe que cron est la mauvaise abstraction.
    Quel fuseau horaire utilise cron ?
    Sur un serveur Linux, vixie cron utilise le fuseau horaire système — généralement défini via `/etc/timezone` ou la variable d'environnement `TZ`. C'est une source fréquente de bugs : un cron à 9 h 00 sur un serveur US East se déclenche à 14:00 UTC, mais sur un serveur réglé en UTC il se déclenche à 09:00 UTC (soit 4 h 00 East). Le correctif consiste soit à toujours régler vos serveurs en UTC et écrire toutes les expressions cron en UTC, soit à définir la variable `CRON_TZ=America/New_York` en haut du crontab pour fixer le fuseau explicitement (pris en charge par vixie cron 3.0+). Les planificateurs managés varient : GitHub Actions tourne toujours en UTC, AWS EventBridge prend en charge le fuseau dans la définition de planification, Kubernetes CronJob a ajouté un champ `spec.timeZone` en 1.27+. Le sélecteur UTC/Local de cet outil vous laisse prévisualiser la planification dans l'un ou l'autre — basculez entre eux pour confirmer que l'exécution se produit là où vous l'aviez prévu.
    À quoi « */15 » se développe-t-il réellement ?
    L'opérateur de pas `*/N` signifie « toutes les N en partant de la plus petite valeur valide du champ ». Pour la minute (plage 0-59), `*/15` se développe en `0,15,30,45` — quatre exécutions par heure aux quarts d'heure. Le pas n'est PAS « toutes les 15 minutes à partir de l'heure actuelle » ; il est ancré à la valeur de départ du champ. Même logique pour les autres champs : `*/2` dans heure signifie `0,2,4,...,22` (12 exécutions) ; `*/3` dans jour du mois signifie `1,4,7,...,31` (11 exécutions). Pour des bases de pas non joker (p. ex. `5/15`), le développement part de la base : `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 le comportement correct de cron, pas un bug. L'aperçu des prochaines exécutions rend la planification réelle évidente.
    Puis-je utiliser une expression à six champs avec des secondes ?
    Les expressions à six champs avec un champ secondes en tête (plage 0-59) sont une extension Quartz/Spring/Cron4j, pas POSIX. Cet outil accepte les expressions à six champs lorsque l'entrée contient exactement six jetons séparés par des espaces — utile si vous ciblez Quartz, `@Scheduled(cron=...)` de Spring, ou des bibliothèques Node.js comme `node-cron` qui prennent en charge les secondes. Pour les planificateurs POSIX standard (crontab Linux, GitHub Actions, AWS EventBridge, Kubernetes CronJob), tenez-vous à cinq champs — ajouter un champ secondes en tête cassera silencieusement la planification (le planificateur interprétera votre minute comme des secondes, votre heure comme des minutes, etc., décalant tout d'un cran). En cas de doute, consultez la documentation de votre planificateur cible ; s'il n'indique pas explicitement « six champs avec secondes pris en charge », utilisez cinq champs.
    Quel est l'intervalle maximal que cron peut exprimer ?
    Sans état externe, cron peut exprimer de manière fiable jusqu'à une fois par an avec `0 0 D M *` (p. ex. `0 0 1 1 *` = chaque 1er janvier à minuit). Pour « tous les deux ans » ou des intervalles plus longs, cron seul ne suffit pas — il faut un test de date externe en tête de votre script (p. ex. `[ $(($(date +%Y) % 2)) -eq 0 ] && /votre-commande` pour s'exécuter les années paires). Pour « tous les 90 jours » ou d'autres intervalles multi-jours non alignés, cron échoue aussi : il n'existe pas d'opérateur modulo-jour natif, vous écririez donc un wrapper qui vérifie le jour de l'année par rapport à une date de référence. Si vos besoins de planification sont à ce point complexes, envisagez un véritable ordonnanceur de workflow (Airflow, Temporal, AWS Step Functions) — la grammaire de cron est volontairement simple et casse pour tout ce qui dépasse les motifs hebdomadaires/mensuels réguliers.
    Comment gérer les exécutions manquées après une panne ?
    Le cron standard n'a aucune récupération — si le système était hors service à l'heure planifiée, l'exécution est simplement sautée. Il n'y a aucune trace du « celle-ci a été manquée ». Pour les jobs critiques, vous avez trois options : (1) Utiliser `anacron` (ou `systemd-cron` avec `Persistent=true`), qui rattrape les jobs manqués après le démarrage, adapté aux portables et systèmes intermittents. (2) Passer à un planificateur avec retentative intégrée : les Kubernetes CronJobs disposent de `startingDeadlineSeconds` (s'exécute si le délai reste dans la deadline) et de `concurrencyPolicy` (évite les exécutions qui se chevauchent) ; AWS EventBridge prend en charge des politiques de retentative. (3) Construire l'idempotence dans le job lui-même : au lieu de « envoyer le rapport à 9 h », faites en sorte que le job demande « le rapport d'aujourd'hui a-t-il été généré ? » et le produise sinon — cela s'auto-répare après n'importe quelle durée de panne. L'option 3 est la plus robuste et fonctionne avec n'importe quel planificateur.
    Pourquoi mon cron GitHub Actions ne s'exécute-t-il pas à l'heure ?
    Les planifications GitHub Actions sont en best-effort : elles peuvent se déclencher avec plusieurs minutes de retard sous forte charge sur l'infrastructure de GitHub, et en période de charge très élevée elles peuvent être sautées entièrement (en particulier pour les intervalles courts comme toutes les cinq minutes). Le même avertissement s'applique à la plupart des planificateurs managés — ils troquent un timing exact contre l'échelle et la fiabilité. Implications pratiques : (1) Ne planifiez pas des choses qui doivent s'exécuter à la seconde près ; cron est pour « grosso modo à cette heure, quotidiennement ». (2) Pour les courts intervalles, préférez un worker de longue durée à un job planifié. (3) Pour des échéances financières ou de conformité à l'heure précise, utilisez un démon cron dédié sur un serveur que vous contrôlez, ou un planificateur plus strict comme AWS EventBridge Scheduler en planification Standard. (4) GitHub Actions en particulier : évitez les intervalles inférieurs à 15 minutes ; le planificateur les saute souvent sous charge.