
Expression cron : lire la syntaxe et calculer les prochaines exécutions
Lisez une expression cron champ par champ, voyez ses prochaines exécutions en UTC ou en heure locale et évitez les pièges de pas, de fuseau et de dialecte.
Une expression cron se lit champ par champ et se vérifie sur des dates
Une ligne comme */15 9-17 * * 1-5 pilote une sauvegarde, un workflow CI ou un CronJob Kubernetes. Elle est courte et on la relit rarement. Un champ lu de travers, et la tâche part à la mauvaise heure, en double ou pas du tout. Le parseur cron accepte cinq champs (minute, heure, jour du mois, mois, jour de la semaine) ou six, avec les secondes en tête. Il accepte aussi les alias comme @daily et @hourly. Il affiche une phrase qui résume le planning et la valeur de chaque champ. Il donne aussi les 5, 10 ou 25 prochaines exécutions, en UTC ou dans le fuseau de votre navigateur. Le calcul se fait dans l’onglet et l’expression n’est envoyée à personne. Ce guide rappelle la syntaxe et les alias, puis montre comment lire le résultat. Viennent ensuite les pièges qui coûtent cher. Un pas ne tombe pas juste, deux champs de jour forment une alternative, une date n’existe pas, et le fuseau comme le changement d’heure du 25 octobre 2026 déplacent tout. Il compare enfin les dialectes de crontab, de Kubernetes, de GitHub Actions et d’AWS EventBridge, et refait les calculs en code. Les outils voisins se trouvent dans le hub des utilitaires développeur.
À quoi sert le parseur, et où il s’arrête
Le parseur répond à une seule question : à quels instants cette expression se déclenche-t-elle ? Il permet de le vérifier avant de la déployer.
Le parseur calcule des dates. Le reste de la chaîne se contrôle ailleurs.
Lire les résultats sans se tromper
Saisissez l’expression dans le parseur cron. Les dates ci-dessous partent du vendredi 16 octobre 2026 à 12:00 UTC. L’outil part de l’instant présent : vos dates seront donc d’autres.
Un pas se calcule à l’intérieur de la plage du champ. À chaque début de plage, le compteur repart de zéro.
Quand les deux champs sont renseignés, cron ne les combine pas en ET. Il lance la tâche si l’un ou l’autre correspond, selon la page de manuel de crontab. L’outil le signale par une note sous la phrase de résumé.
Une expression valide peut ne jamais se déclencher. L’outil cherche sur environ deux ans et le dit.
Quatre erreurs qu’on ne voit qu’en production
Le parseur calcule toujours en UTC. L’option Local ne change que l’écriture des dates trouvées. 0 9 * * * donne 09:00 UTC, que l’outil écrit 11:00 sur un navigateur réglé sur Paris le 16 octobre 2026. Un cron lancé sur un serveur réglé sur Paris se déclenche à 09:00 heure de Paris, c’est-à-dire 07:00 UTC jusqu’au 24 octobre et 08:00 UTC ensuite. Le fuseau qui s’applique dépend du système qui exécute. Le démon cron suit le fuseau de la machine. Un CronJob Kubernetes suit celui du kube-controller-manager, sauf si .spec.timeZone est renseigné. GitHub Actions compte en UTC par défaut.
L’Europe passe à l’heure d’hiver le dimanche 25 octobre 2026. À 03:00 heure d’été, il est de nouveau 02:00. Les États-Unis changent une semaine plus tard, le 1er novembre. Une tâche fixée à 30 2 * * * rencontre alors une heure qui existe deux fois au retour à l’heure d’hiver, ou pas du tout au passage à l’heure d’été. Les implémentations ne s’accordent pas. La page de manuel Debian de cron(8) indique que les tâches de l’heure sautée partent peu après le changement et que celles de l’heure répétée ne sont pas relancées. La page crontab(5) publiée sur man7.org écrit le contraire. Une heure qui n’existe pas ne correspond jamais, et une heure répétée déclenche deux fois. GitHub Actions, avec la clé timezone, avance une exécution tombée dans l’heure sautée jusqu’à la prochaine heure valide.
Le même planning s’écrit différemment selon l’outil. AWS EventBridge ajoute un champ année et exige un ? dans l’un des deux champs de jour. Quartz et Spring placent les secondes en premier. Le parseur refuse ce qu’il ne connaît pas et nomme le champ et le jeton en cause, par exemple « Valeur invalide dans Jour du mois (?) ».
Une expression juste ne garantit ni que la tâche part, ni qu’elle part une seule fois. La documentation de Kubernetes prévient que la création d’un Job est approximative : deux Jobs peuvent être créés, ou aucun, et les tâches doivent donc être idempotentes. La politique de concurrence par défaut est Allow, qui laisse démarrer une exécution pendant que la précédente tourne. Si le contrôleur compte plus de 100 départs manqués, il ne lance plus la tâche et journalise une erreur. GitHub Actions retarde les exécutions planifiées aux heures de forte charge, surtout au début de chaque heure, et peut en abandonner. Dans un dépôt public, les workflows planifiés sont désactivés après 60 jours sans activité.
Champs, alias et dialectes en un coup d’œil
Chaque champ accepte les mêmes opérateurs. Seules les bornes changent.
Un alias remplace toute l’expression. Le parseur les développe dans la zone de saisie.
Avant de copier une expression, vérifiez ce que la cible comprend.
Le parseur cron, pas à pas
Le parseur cron analyse pendant la saisie, après une courte pause. Le bouton Analyser, ou la touche Entrée dans le champ, lance le calcul sans attendre.
Saisissez ou choisissez un préréglage
Six préréglages remplissent le champ : toutes les 5 minutes, toutes les 15 minutes, toutes les heures, tous les jours à minuit, jours ouvrés à 09:00 et le 1er de chaque mois. Un alias comme @daily est remplacé par sa forme à cinq champs.
Lisez la phrase
Pour les plannings simples, une phrase résume l’expression, par exemple « Toutes les 15 minutes » ou « À 09:00 du lundi au vendredi ». Sinon l’outil affiche « Détail du planning » et vous laisse lire les champs.
Vérifiez les cases
Chaque case porte le nom d’un champ et sa valeur. Une note apparaît quand le jour du mois et le jour de la semaine sont tous deux fixés. Elle rappelle que l’un ou l’autre suffit.
Lisez les prochaines exécutions
La liste donne les dates complètes, avec une ligne « Prochaine » qui donne le délai avant la première. Un avertissement apparaît si aucune date n’existe ou si la recherche s’arrête avant d’en trouver assez.
Trois réglages sous le champ de saisie changent ce que l’outil calcule ou affiche.
Cinq ou six champs
Cinq champs est le réglage de départ. Passer à six ajoute 0 en tête de l’expression, donc des secondes à zéro. Repasser à cinq retire ce zéro, et l’outil refuse tant que les secondes valent autre chose que 0.
Exécutions à afficher
Choisissez 5, 10 ou 25. Prenez 25 pour voir le motif d’un pas, d’une fin de mois ou de deux champs de jour combinés.
Fuseau
UTC est le réglage de départ. Local utilise le fuseau de votre navigateur. Un badge au-dessus de la phrase rappelle le choix. Le calcul reste en UTC dans les deux cas : seule l’écriture des dates change.
Copier
Copier la description reprend la phrase, Tout copier reprend la liste, et chaque ligne a son propre bouton Copier.
Quand l’expression est refusée, l’outil dit pourquoi et ne calcule rien.
Expression vide
Un champ vidé après une saisie affiche « Saisissez une expression cron ».
Mauvais nombre de champs
« Expression cron invalide pour le nombre de champs choisi » signale quatre champs, ou six alors que le réglage est sur cinq. Changez le réglage ou corrigez les jetons.
Valeur invalide
Un message comme « Valeur invalide dans Heure (22-2) » nomme le champ et le jeton fautif, et la case du champ est mise en évidence.
Alias non pris en charge
@reboot et tout alias hors liste donnent un message qui rappelle ceux que l’outil accepte.
Les mêmes plannings dans une crontab, Kubernetes, GitHub Actions et Node
La ligne s’écrit dans crontab -e. La commande occupe le reste de la ligne : un % non protégé y devient un saut de ligne, d’où le \% de l’exemple (selon la page de manuel de crontab). Cron n’exécute pas votre profil de connexion, donnez donc le chemin complet des programmes.
Exemple de base
Le fuseau se déclare dans .spec.timeZone, jamais dans schedule. Vérifiez le manifeste avec le validateur Kubernetes avant de l’appliquer.
Exemple de base
Le workflow ne se déclenche que s’il existe sur la branche par défaut. Le validateur GitHub Actions contrôle le fichier. Le parseur cron vérifie les dates.
Exemple de base
Pour calculer les prochaines exécutions dans un fuseau, comme le fait un vrai cron, passez l’option tz. L’exemple utilise la version 5 de la bibliothèque. Il montre l’écart avec le parseur de FastMinify, qui calcule en UTC : la même ligne donne 07:00 UTC avant le 25 octobre 2026 et 08:00 UTC après, pour une heure de Paris.
Exemple de base
Conclusion
Une expression cron tient en cinq champs, et presque toute l’erreur vient de ce qu’on n’y voit pas. Un pas repart de zéro, deux champs de jour se combinent en OU, une date n’existe pas, un fuseau ou un changement d’heure déplace tout. Le parseur cron met des dates en face de la ligne, ce qui permet de repérer ces cas avant le déploiement. Il calcule en UTC, ne lance aucune tâche et ne connaît que les cinq ou six champs et les alias courants. La cible compte autant que l’expression : crontab, Kubernetes, GitHub Actions, EventBridge et Quartz ne lisent pas la même syntaxe. Gardez des tâches qu’on peut relancer sans dégât et surveillez leur dernier succès. Le hub des utilitaires développeur réunit les outils voisins.
Analyser une expression cron dans votre navigateur
Articles connexes

Calculez réseau, masque, plage d’hôtes et broadcast d’un CIDR, agrégez des plages en blocs minimaux et testez une IP, directement dans votre navigateur.

Formatez un Copy as cURL, analysez une requête ou une réponse HTTP brute et lisez un export HAR dans votre navigateur : rien n’est envoyé ni rejoué.

Décodez l'en-tête et le payload d'un JWT ou signez un token de test dans votre navigateur : HS256, RS256, ES256, sans envoyer de secret à un tiers.