ItsMyIp

Décodez vos expressions cron

Collez une expression crontab : chaque champ traduit en clair, les prochaines exécutions calculées dans votre fuseau — et les pièges classiques signalés.

Exemples

01Lire une expression cron

Une ligne crontab compte cinq champs, de gauche à droite : minute (0-59), heure (0-23), jour du mois (1-31), mois (1-12) et jour de semaine (0-7, dimanche = 0 ou 7). Chaque champ accepte une valeur, une liste (1,15), une plage (8-18), un pas (*/5) ou l'étoile « toutes les valeurs ». */15 8-18 * * 1-5 se lit donc : toutes les 15 minutes, de 8 h à 18 h, du lundi au vendredi.

Le calcul des prochaines exécutions se fait dans votre navigateur, dans votre fuseau — attention : le serveur qui exécutera la tâche a peut-être un fuseau différent (les serveurs sont souvent en UTC). Un 0 9 * * * sur un serveur UTC sonne à 10 h ou 11 h heure de Paris selon la saison.

02La syntaxe en détail

*
Toutes les valeurs du champ. * dans minute = chaque minute.
a-b
Une plage inclusive : 8-18 dans heure = de 8 h à 18 h. 1-5 dans jour de semaine = du lundi au vendredi.
*/n
Un pas : */5 dans minute = toutes les 5 minutes (0, 5, 10…). Fonctionne aussi sur une plage : 8-18/2.
a,b,c
Une liste : 0,30 dans minute = à la minute 0 et 30. Combinable avec plages et pas.
Noms
Mois et jours acceptent trois lettres anglaises : jan-dec, sun-sat. 0 9 * * mon-fri est équivalent à 0 9 * * 1-5.
@alias
@hourly (0 * * * *), @daily (0 0 * * *), @weekly (0 0 * * 0), @monthly (0 0 1 * *), @yearly (0 0 1 1 *), @reboot (au démarrage, non planifiable).

03Les pièges classiques

Le plus vicieux : quand jour du mois et jour de semaine sont tous deux précisés, cron exécute si l'un OU l'autre correspond — 0 0 13 * 5 tourne le 13 de chaque mois ET tous les vendredis, pas seulement les vendredis 13. Autre grand classique : croire que */60 ou une minute * avec une heure précise fait « une fois » : * 9 * * * s'exécute 60 fois, chaque minute de 9 h à 9 h 59.

Pensez aussi au fuseau du serveur (souvent UTC), aux nuits de changement d'heure (une tâche à 2 h 30 peut sauter ou doubler), et à l'environnement minimal de cron : pas votre PATH ni vos variables shell — la cause n°1 des « ça marche dans mon terminal mais pas en cron ». Pour planifier côté Cloudflare Workers, les Cron Triggers utilisent cette même syntaxe, toujours en UTC.

04Questions fréquentes

Pourquoi ma tâche cron tourne-t-elle à la mauvaise heure ?

Dans 9 cas sur 10 : le fuseau. Cette page calcule dans le fuseau de votre navigateur, mais le démon cron utilise celui du serveur — très souvent UTC sur les machines cloud. Vérifiez avec la commande date sur le serveur, et décalez l'expression en conséquence (ou définissez CRON_TZ / TZ quand votre cron le supporte).

Comment exécuter une tâche toutes les 30 secondes ?

Cron ne descend pas sous la minute. Les contournements classiques : deux lignes identiques dont une préfixée de sleep 30, une boucle dans le script lui-même, ou un timer systemd (OnUnitActiveSec=30s) qui est l'outil prévu pour ça sur les systèmes modernes.

Que signifie 0 0 13 * 5 exactement ?

Minuit, le 13 de chaque mois OU chaque vendredi — pas « les vendredis 13 ». Quand jour du mois et jour de semaine sont tous deux restreints, la norme historique (vixie-cron) applique un OU logique. Pour viser réellement les vendredis 13, il faut tester le jour dans le script : cron lance le 13, le script vérifie que c'est un vendredi.

Mon script marche à la main mais pas via cron. Pourquoi ?

Cron lance les tâches dans un environnement minimal : PATH réduit (souvent /usr/bin:/bin), pas de variables de votre .bashrc, pas de terminal. Utilisez des chemins absolus (/usr/local/bin/python3 plutôt que python3), définissez les variables nécessaires en tête de crontab, et redirigez la sortie vers un fichier de log pour voir l'erreur réelle.

05Autres outils