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
Notre équipe vérifie le générateur crontab par rapport à cron POSIX (vixie/BSD), Quartz, Kubernetes CronJob, GitHub Actions et la sémantique d'AWS EventBridge — y compris la règle OR POSIX jour du mois / jour de la semaine, les mois/jours nommés, les macros (@daily, etc.), le mode secondes à six champs et la limite annuelle sur les planifications impossibles.
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,*/Npour les pas,a-bpour les plages et1,3,5pour 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, lescheduleKubernetes 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 fichierscrontab -epar 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.schedulepour un Kubernetes CronJob. Kubernetes 1.27+ prend aussi en chargespec.timeZone— utilisez le sélecteur UTC pour concevoir votre planification en UTC, puis définissez explicitementtimeZoneafin d'éviter l'heure locale du nœud worker. - Workflows planifiés GitHub Actions
- Construisez l'entrée
cron:souson.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]danswrangler.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-5ou 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 * * * *.@rebootest 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
*/Nest ancré à la plus petite valeur du champ :*/15dans minute =0,15,30,45, et non « toutes les 15 à partir de maintenant ». Avec une base non joker :5/15dans 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/timezoneouTZ=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 », écrivez0 0 1 * *(le jour de la semaine est*). La règle OR du POSIX signifie que0 0 1 * 1s'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_Yorken haut d'un crontab (vixie cron 3.0+),spec.timeZone: "America/New_York"pour les Kubernetes CronJobs 1.27+, expression de planification avecScheduleExpressionTimezonepour 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 que0 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 ?
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 ?
Quelle est la différence entre cron POSIX et Quartz ?
? (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 ?
*), 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 ?
* * * * * 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 ?
/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 ?
*/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 ?
@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 ?
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 ?
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 ?
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é.
Outil de déchiffrement AES — compatible OpenSSL et CryptoJS
Outils de sécurité
Déchiffrez de l'AES en ligne — GCM/CBC/CTR, phrase secrète ou clé brute, détection automatique du format OpenSSL et CryptoJS « U2FsdGVkX1 ». 100 % dans le navigateur, les clés ne quittent jamais la page.
Outil de chiffrement AES — GCM, CBC et CTR
Outils de sécurité
Chiffrement AES en ligne gratuit — AES-128/192/256, GCM/CBC/CTR, phrase secrète (PBKDF2) ou clé brute. 100 % dans votre navigateur ; rien n'est envoyé.
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 Base64 en Image
Encodage et formatage
Décodez une chaîne Base64 ou un URI de données en image dans votre navigateur. Aperçu, dimensions et MIME, puis téléchargement en PNG, JPG, GIF, SVG. Sans envoi.