CodeKitHub
Outils de code

Générateur d'Expressions Cron

Dernière mise à jour:

Une expression cron est une chaîne à cinq champs (minute, heure, jour du mois, mois, jour de la semaine) qui indique à un planificateur comme Unix cron, crontab ou un pipeline CI/CD exactement quand exécuter une tâche — par exemple `*/15 9-17 * * MON-FRI` signifie « toutes les 15 minutes, entre 9h et 17h, du lundi au vendredi ». Cet outil fonctionne dans les deux sens : construisez un planning à l'aide de simples menus déroulants et obtenez la chaîne cron, ou collez une expression cron existante et voyez instantanément une traduction en langage clair ainsi que les 5 prochaines fois qu'elle s'exécutera réellement. Il suit la syntaxe cron POSIX/Vixie standard à 5 champs utilisée par Unix, crontab Linux et la plupart des planificateurs de tâches — consultez la page de manuel crontab(5) pour la spécification de référence. Tout s'exécute localement dans votre navigateur ; rien de ce que vous saisissez n'est envoyé nulle part.

Description
Prochaines exécutions
    Générateur
    Minute
    Heure
    Jour du mois
    Mois
    Jour de la semaine
    Guide de syntaxe
    • * — any value
    • , — value list separator (e.g. 1,3,5)
    • - — range of values (e.g. 1-5)
    • / — step values (e.g. */15 = every 15)

    En quoi consiste cet outil ?

    Une expression cron est une chaîne de planning compacte à cinq champs — `minute heure jour-du-mois mois jour-de-la-semaine` — utilisée par le démon `cron` d'Unix et pratiquement tous les planificateurs de tâches qui s'en inspirent (crontab, CronJobs Kubernetes, `schedule:` de GitHub Actions, Airflow, Jenkins). Chaque champ accepte un astérisque (`*`, signifiant « n'importe quelle valeur »), un nombre spécifique, une liste séparée par des virgules (`1,15,30`), une plage (`9-17`), un pas (`*/15`, signifiant « toutes les 15 unités ») ou, pour le mois et le jour de la semaine, un nom de trois lettres (`JAN`, `MON`) au lieu d'un nombre.

    La définition canonique de cette syntaxe est la page de manuel crontab(5) de Linux, qui documente exactement les mêmes cinq champs, les caractères spéciaux (`* , - /`) et les huit chaînes abrégées `@` (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`) que la plupart des implémentations cron, y compris Vixie cron (la version fournie sur la plupart des distributions Linux), prennent en charge comme alias pour les plannings courants.

    Cet outil implémente exactement ce format standard à 5 champs — le format que vous saisiriez directement dans `crontab -e` sur un serveur Linux ou macOS, ou dans le champ `schedule:` d'un CronJob Kubernetes. Il n'implémente pas la syntaxe cron Quartz, un format différent à 6 ou 7 champs utilisé par le Quartz Scheduler de Java et par certains outils tiers (voir la section de comparaison ci-dessous pour savoir quand vous en avez besoin à la place).

    Pourquoi l'utiliser ?

    • Vous héritez d'un dépôt et trouvez `0 3 * * 1-5` dans la config d'un CronJob Kubernetes sans aucun commentaire — collez l'expression ici pour confirmer en quelques secondes qu'elle s'exécute à 3h du lundi au vendredi avant de toucher à quoi que ce soit.
    • Vous configurez un workflow GitHub Actions avec `schedule:` et ne vous souvenez plus si l'ordre des champs est minute-heure ou heure-minute — construisez le planning avec les menus déroulants plutôt que de risquer une erreur de décalage de champ.
    • Un CronJob censé ne tourner que le lundi s'est mis à s'exécuter aussi le 1er de chaque mois, et vous soupçonnez le piège classique jour-du-mois combiné au jour-de-la-semaine — vérifiez les 5 prochaines exécutions calculées pour confirmer le comportement d'union avant de signaler le bug.
    • Votre équipe DevOps vous demande une tâche qui s'exécute « toutes les 15 minutes en heures ouvrées, du lundi au vendredi », et vous voulez livrer l'expression cron exacte plutôt qu'une approximation que quelqu'un devra corriger ensuite.
    • Vous voyez `@daily` dans un crontab hérité et n'êtes pas sûr que ça corresponde à minuit ou à une autre heure — traduisez le raccourci en son expression équivalente à 5 champs avant de décider s'il faut le modifier.
    • Vous migrez un job Quartz Scheduler (à 6 ou 7 champs) vers un CronJob Kubernetes standard et devez confirmer que votre nouvelle expression à 5 champs utilise la bonne syntaxe, sans conserver de caractères comme `?` ou `L` qui n'existent pas en cron standard.

    Mode d'emploi

    1. Pour traduire une expression : saisissez ou collez une chaîne cron à 5 champs (ou un raccourci @ comme `@daily`) dans le champ de saisie.
    2. Lisez la description en langage clair et les 5 prochaines exécutions calculées en dessous — les deux se mettent à jour en temps réel pendant la saisie.
    3. Pour en construire une à la place : ouvrez la section Builder, choisissez un mode (chaque / tous les N / valeur spécifique) pour chacun des cinq champs, puis cliquez sur « Générer l'expression ».
    4. L'expression générée remplit le champ de saisie ci-dessus et alimente immédiatement les panneaux de description et de prochaines exécutions.
    5. Utilisez la légende de syntaxe en bas de page comme référence rapide pour `*`, `,`, `-` et `/`.
    6. Copiez l'expression finale avec le bouton Copier et collez-la dans votre crontab, votre configuration CI ou votre planificateur.

    Exemple

    Entrée

    */15 9-17 * * MON-FRI

    Résultat

    À 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, le lundi, mardi, mercredi, jeudi, vendredi

    Cette expression s'exécute toutes les 15 minutes, mais uniquement dans la plage horaire de 09:00 à 17:59, et uniquement les jours ouvrés — un planning d'interrogation typique des « heures de bureau ».

    Cron standard vs cron Quartz

    La « syntaxe cron » n'est pas un standard universel unique — les deux formats que vous rencontrerez le plus souvent diffèrent par le nombre de champs et par la signification de quelques caractères spéciaux. Utilisez ce tableau pour confirmer que vous utilisez le bon format pour votre planificateur cible.

    AspectCron standard (cet outil)Cron Quartz
    Nombre de champs5 (minute heure dom mois dow)6 ou 7 (ajoute les secondes, et l'année en option)
    Utilisé parcrontab Linux/macOS, CronJob Kubernetes, GitHub ActionsJava Quartz Scheduler, certains planificateurs d'entreprise
    Jour-du-mois + jour-de-la-semaine tous deux définisCorrespond à L'UN OU L'AUTRE (union/OU)Nécessite `?` dans l'un des deux champs — impossible de définir les deux à une valeur simultanément
    Caractères spéciaux supplémentairesAucun au-delà de `* , - /`Ajoute `?`, `L` (dernier), `W` (jour ouvré le plus proche), `#` (n-ième jour de la semaine du mois)
    Planification au niveau de la secondeNon prise en chargePrise en charge (premier champ)

    Outils associés

    Vous travaillez avec des configurations, des plannings ou des horodatages ? Ces outils se combinent bien avec le générateur cron.

    Convertisseur d'Horodatage · Convertisseur d'Horloge Mondiale · Calculateur de Dates

    Plannings cron courants et leur signification

    Voici quelques-uns des motifs les plus répandus dans les configurations réelles de CI/CD, de sauvegardes et de tâches de maintenance — utiles comme point de départ avant d'ajuster les champs à votre cas.

    • `0 0 * * *` — tous les jours à minuit, l'horaire classique pour les sauvegardes nocturnes ou le nettoyage de logs.
    • `0 9 * * 1-5` — à 9h, du lundi au vendredi, typique pour des rapports automatiques qui n'intéressent que les jours ouvrés.
    • `*/5 * * * *` — toutes les 5 minutes, courant pour des healthchecks ou une synchronisation de données fréquente.
    • `0 0 1 * *` — le 1er de chaque mois à minuit, utilisé pour la facturation mensuelle ou la rotation de rapports.
    • `0 2 * * 0` — chaque dimanche à 2h, un horaire habituel pour des tâches de maintenance lourdes quand le trafic est faible.

    Foire aux questions

    Qu'est-ce qu'une expression cron ?

    Une expression cron est une chaîne de texte à 5 champs (`minute heure jour-du-mois mois jour-de-la-semaine`) qui spécifie un planning récurrent pour le démon `cron` d'Unix et les planificateurs compatibles. Chaque champ peut être `*` (n'importe quelle valeur), un nombre, une liste séparée par des virgules, une plage (`a-b`) ou un pas (`*/n`) ; les champs mois et jour de la semaine acceptent aussi des noms de trois lettres comme `JAN` ou `MON`. La spécification complète est documentée dans la page de manuel crontab(5).

    Que se passe-t-il lorsque le jour du mois et le jour de la semaine sont tous deux restreints ?

    C'est un piège cron bien connu : selon la sémantique cron POSIX, lorsque les champs jour-du-mois ET jour-de-la-semaine sont TOUS DEUX restreints (différents de `*`), une tâche s'exécute si L'UNE OU L'AUTRE des conditions est remplie — c'est une union (OU), pas une intersection (ET). Par exemple, `0 4 8 * MON` s'exécute à 4h à la fois le 8 de chaque mois ET chaque lundi, pas seulement les lundis qui tombent le 8. Cet outil implémente exactement ce comportement d'union lors du calcul des prochaines exécutions.

    Cron standard vs cron Quartz — lequel me faut-il ?

    Cet outil génère la syntaxe cron POSIX/Vixie standard à 5 champs — le format utilisé par `crontab` Linux/macOS, les CronJobs Kubernetes, le `schedule:` de GitHub Actions et la plupart des exécuteurs de tâches dérivés d'Unix. Le cron Quartz, utilisé par le Quartz Scheduler de Java et par les outils construits dessus (certains planificateurs d'entreprise, anciennes configurations Spring Batch), est un format différent à 6 ou 7 champs qui ajoute un champ de secondes en tête et change la signification de certains caractères spéciaux (`?` pour « aucune valeur spécifique » dans les champs de jour, `L`/`W`/`#` pour « dernier jour », « jour ouvré le plus proche » et « n-ième jour de la semaine du mois »). Si le nombre de champs de votre planificateur est de 6 ou 7, ou si votre documentation mentionne `?`, `L`, `W` ou `#`, il vous faut un outil spécifique à Quartz — les expressions de ce générateur ne s'y analyseront pas correctement. Si ce sont exactement 5 champs (ou un raccourci de type `@daily`), vous êtes au bon endroit.

    Que signifient les raccourcis @yearly, @monthly, @weekly, @daily et @hourly ?

    Ce sont des chaînes abrégées non standard mais largement prises en charge, qui se développent en expressions courantes à 5 champs : `@yearly`/`@annually` = `0 0 1 1 *` (une fois par an, le 1er janvier à minuit), `@monthly` = `0 0 1 * *` (le 1er de chaque mois à minuit), `@weekly` = `0 0 * * 0` (chaque dimanche à minuit), `@daily`/`@midnight` = `0 0 * * *` (tous les jours à minuit), `@hourly` = `0 * * * *` (au début de chaque heure). Cet outil les analyse toutes et les traite exactement comme leur équivalent développé à 5 champs.

    Puis-je utiliser des noms de jours/mois au lieu de nombres ?

    Oui. Le champ mois accepte les noms de trois lettres de `JAN` à `DEC`, et le champ jour de la semaine accepte `SUN` à `SAT` (insensible à la casse), de manière interchangeable avec les nombres. Les nombres de jour de la semaine vont de 0 à 6, où 0 = dimanche ; certaines implémentations acceptent aussi 7 pour dimanche, que cet outil normalise en 0. Les plages et les listes fonctionnent aussi avec les noms, par exemple `MON-FRI` ou `JAN,JUN,DEC`.

    Mon expression cron est-elle envoyée à un serveur ?

    Non. L'analyse, la description en langage clair et le calcul des prochaines exécutions se font tous localement en JavaScript dans votre navigateur. Rien de ce que vous saisissez ou générez ne quitte jamais votre appareil.

    Dans quel fuseau horaire l'outil calcule-t-il les prochaines exécutions ?

    Il utilise le fuseau horaire configuré dans votre navigateur/appareil. Notez que beaucoup de systèmes cron sur serveur sont configurés en UTC par défaut — si votre serveur n'est pas dans votre fuseau, les prochaines exécutions affichées ici peuvent différer des heures réelles d'exécution sur le serveur. Vérifiez le fuseau horaire du système avant de vous fier au résultat.

    Comment écrire une expression qui s'exécute le dernier jour de chaque mois ?

    Le cron standard à 5 champs n'a pas de caractère spécial pour « dernier jour du mois » (c'est `L`, exclusif à Quartz) — la solution habituelle consiste à programmer la tâche pour le 1er du mois suivant et à soustraire un jour dans le script, ou à utiliser `28-31` combiné à une logique supplémentaire dans le job pour vérifier s'il s'agit du dernier jour.

    Pourquoi mon expression avec `*/7` dans le champ jour-du-mois ne s'exécute-t-elle pas exactement tous les 7 jours ?

    Le pas `*/7` dans le champ jour-du-mois ne compte pas depuis la dernière exécution mais depuis le 1er du mois : il s'exécute les jours 1, 8, 15, 22 et 29 — pas tous les 7 jours en continu d'un mois à l'autre. Pour un véritable intervalle de 7 jours sans redémarrage mensuel, il faut une logique externe au cron ou un planificateur gérant les intervalles relatifs.

    Puis-je générer un planning qui s'exécute à plusieurs minutes précises, comme 0, 15, 30 et 45 ?

    Oui — utilisez une liste séparée par des virgules dans le champ minutes : `0,15,30,45 * * * *`. C'est équivalent en résultat à `*/15 * * * *` dans ce cas précis, mais une liste vous donne un contrôle total quand les minutes ne sont pas espacées uniformément.

    Outils associés