Générateur et explication d’expressions cron

Créez une expression cron ou lisez-en une en langage clair.

À propos de cet outil

Choisissez la fréquence d’exécution d’une tâche pour créer une expression cron, ou saisissez-en une pour obtenir une description en langage clair, le détail de chaque champ et ses prochaines exécutions dans votre fuseau horaire. Prend en charge les plages, les listes, les pas, les noms de mois et de jours, et les raccourcis comme @daily.

Mode d’emploi

  1. Pour lire une expression, collez-la en mode Expliquer et lisez-la en langage clair.
  2. Pour en créer une, passez en mode Créer et choisissez la fréquence d’exécution de la tâche.
  3. Vérifiez les prochaines exécutions, affichées dans votre propre fuseau horaire.
  4. Copiez l’expression dans votre crontab, votre configuration de CI ou votre planificateur.

Questions

Que signifient les cinq champs ?
Dans l’ordre : minute (0–59), heure (0–23), jour du mois (1–31), mois (1–12) et jour de la semaine (0–6, dimanche vaut 0 ou 7). Un * signifie toutes les valeurs.
Comment exécuter une tâche toutes les 5 minutes ?
Utilisez */5 * * * *. Le /5 est un pas, qui signifie une valeur sur cinq de ce champ à partir de 0.
Que se passe-t-il si je définis à la fois le jour du mois et le jour de la semaine ?
En cron classique, la tâche s’exécute quand l’un des deux correspond, pas forcément les deux. Ainsi 0 9 1 * MON s’exécute à 9:00 le 1er de chaque mois et chaque lundi.
Quel fuseau horaire cron utilise-t-il ?
Le fuseau horaire de la machine ou du service qui l’exécute, souvent UTC sur les serveurs et en CI. Les prochaines exécutions sont affichées ici dans votre heure locale : convertissez-les si votre serveur utilise UTC.
Comment exécuter une tâche cron toutes les 30 secondes ?
Cron ne le permet pas : sa plus petite unité est la minute. Une astuce courante consiste à créer deux entrées, l’une qui lance la commande et l’autre qui lance sleep 30 suivi de la commande. Pour quelque chose de plus précis ou de plus fréquent, utilisez un timer systemd ou un processus de longue durée avec sa propre boucle.
Comment exécuter une tâche le dernier jour du mois ?
Le cron standard ne connaît pas L. Planifiez la tâche pour les jours 28-31, par exemple 0 23 28-31 * *, et commencez la commande par une vérification que demain est le 1er, par exemple [ $(date -d tomorrow +\%d) = 01 ] && your-command, ce qui nécessite GNU date.
Que signifie @reboot dans une crontab ?
@reboot lance la commande une fois au démarrage du démon cron, généralement juste après le démarrage de la machine. Il est pris en charge par cronie et Vixie cron, mais ce n’est pas une planification horaire : cet outil ne peut donc pas afficher ses prochaines exécutions et signale une erreur. Sur les machines sous systemd, une unité de service est souvent un meilleur choix.

Pourquoi ma tâche cron ne s’exécute-t-elle pas ?

Vérifiez d’abord que cron voit bien la tâche. Lancez crontab -l avec le même utilisateur, et assurez-vous que le fichier se termine par un saut de ligne, car certaines versions de cron ignorent une dernière ligne qui n’en a pas. Vérifiez ensuite la planification : collez-la ici et lisez les prochaines exécutions. Une surprise fréquente est */45 dans le champ des minutes, qui se déclenche à :00 et à :45 chaque heure, et non toutes les 45 minutes.

Si la planification est correcte, c’est généralement l’environnement qui pose problème. Cron s’exécute avec un PATH minimal et sans profil de shell, donc des commandes qui fonctionnent dans votre terminal échouent avec « command not found ». Utilisez des chemins absolus, définissez PATH en haut de la crontab et envoyez la sortie dans un journal avec >> /tmp/job.log 2>&1 pour voir les erreurs. Notez aussi que % a une signification spéciale dans les lignes de crontab et doit être échappé en \%.

La syntaxe cron expliquée : plages, listes, pas et raccourcis

Chaque champ accepte plus qu’un simple nombre. Une plage comme 9-17 correspond à toutes les valeurs de 9 à 17, une liste comme 1,15 correspond à chaque valeur listée, et un pas comme */15 correspond à une valeur sur quinze à partir du minimum du champ. Ils se combinent : 0-30/10 dans le champ des minutes signifie 0, 10, 20 et 30. Les champs du mois et du jour de la semaine acceptent aussi des noms comme JAN ou MON-FRI.

Les raccourcis remplacent une expression entière : @hourly équivaut à 0 * * * *, @daily et @midnight à 0 0 * * *, @weekly à 0 0 * * 0, @monthly à 0 0 1 * *, et @yearly ou @annually à 0 0 1 1 *. Dans le champ du jour de la semaine, 0 et 7 désignent tous deux le dimanche. Le tableau Champs de cet outil d’explication d’expressions cron montre les valeurs auxquelles chaque champ se développe : c’est le moyen le plus rapide de vérifier une combinaison délicate.

Crontab, Kubernetes, GitHub Actions et cron Quartz : quelles différences ?

Le format à cinq champs est commun à la crontab Linux, aux CronJobs Kubernetes et aux planifications GitHub Actions : une expression construite avec ce générateur cron fonctionne donc dans les trois. GitHub Actions utilise toujours l’UTC, s’exécute au plus toutes les 5 minutes et peut démarrer les tâches planifiées en retard en cas de forte charge. Kubernetes utilise le fuseau horaire du contrôleur, sauf si vous définissez spec.timeZone. Aucun d’eux ne prend en charge un champ des secondes.

Quartz, Spring et AWS EventBridge utilisent des formats plus longs. Quartz et Spring ajoutent un champ des secondes au début, et AWS un champ de l’année à la fin. Quartz et AWS exigent aussi un ? dans l’un des deux champs de jour, et les trois prennent en charge des extensions comme L pour le dernier jour et # pour le n-ième jour de la semaine. Ces expressions sont refusées ici : supprimez les champs supplémentaires et réécrivez L ou # à la main.

Expressions cron courantes

Copiez l’une de ces planifications, ou collez-la dans l’outil ci-dessus pour voir ses prochaines exécutions.

ExpressionSignification
* * * * *Toutes les minutes
*/5 * * * *Toutes les 5 minutes
*/15 * * * *Toutes les 15 minutes
0 * * * *Toutes les heures
0 */6 * * *À l'heure pile, toutes les 6 heures
0 0 * * *À 00:00
30 2 * * *À 02:30
0 9 * * 1-5À 09:00, de lundi à vendredi
0 0 * * 0À 00:00, uniquement le dimanche
0 0 1 * *À 00:00, le 1 du mois
0 0 1 1 *À 00:00, le 1 du mois, uniquement en janvier

Quelque chose ne fonctionne pas, ou un résultat semble faux ? Signaler un problème avec cet outil