Date et heure

Lire et écrire des expressions cron : les cinq champs et des exemples courants

Sauvegarder chaque jour à 2 h, envoyer un rapport à 9 h en semaine, vérifier un état toutes les dix minutes : voici tout ce qu'il faut pour planifier des tâches récurrentes avec cron.

Les cinq champs

Une expression cron Unix standard comporte cinq champs séparés par des espaces : minute (0–59), heure (0–23), jour du mois (1–31), mois (1–12) et jour de la semaine (0–7, où 0 et 7 désignent tous deux le dimanche). La tâche s'exécute chaque fois que tous les champs correspondent.

Par exemple, 0 2 * * * signifie minute 0, heure 2, tous les jours, tous les mois, n'importe quel jour de la semaine : chaque jour à 2 h 00. Un astérisque signifie « toutes les valeurs ».

┌───── minute (0-59)
│ ┌─── heure (0-23)
│ │ ┌─ jour du mois (1-31)
│ │ │ ┌ mois (1-12)
│ │ │ │ ┌ jour de la semaine (0-7, dim=0 ou 7)
│ │ │ │ │
0 2 * * *

Quatre caractères spéciaux

En combinant ces quatre caractères, on couvre la plupart des planifications. Certains systèmes acceptent aussi des noms comme MON et JAN.

  • * (tout) : * dans le champ heure signifie toutes les heures.
  • , (liste) : 1,15 signifie le 1er et le 15.
  • - (plage) : 1-5 dans le champ jour de la semaine signifie du lundi au vendredi.
  • / (pas) : */10 dans le champ minute signifie 0, 10, 20… toutes les dix minutes. On peut aussi donner un début, comme 5-59/15.

Exemples courants

Après avoir écrit une expression, calculez les prochaines exécutions pour vérifier qu'elle fait bien ce que vous voulez. N'oubliez pas que les pas se comptent à partir de zéro, pas à partir du lancement de la tâche : */45 dans le champ minute s'exécute à :00 et :45 chaque heure, et non toutes les 45 minutes.

*/5 * * * *      toutes les 5 minutes
0 * * * *        toutes les heures pile
30 9 * * 1-5     09:30 en semaine
0 0 1 * *        minuit le 1er de chaque mois
0 18 * * 5       18:00 chaque vendredi
0 3 * * 0        03:00 chaque dimanche
0 9,18 * * *     09:00 et 18:00 chaque jour
0 0 1 1 *        minuit le 1er janvier

Pièges courants

Le piège le plus connu consiste à renseigner à la fois le jour du mois et le jour de la semaine. 0 0 13 * 5 ressemble à « vendredi 13 », mais en cron standard, lorsqu'aucun des deux champs n'est *, ils se combinent avec un OU : la tâche s'exécute le 13 de chaque mois et chaque vendredi.

Le deuxième est « le dernier jour du mois ». Le cron standard à cinq champs n'a pas de symbole pour cela ; une solution courante consiste à exécuter la tâche du 28 au 31 et à faire vérifier par le script si le lendemain est le 1er. Certains planificateurs comme Quartz acceptent L, mais ils utilisent un format à six ou sept champs avec les secondes, incompatible avec le cron standard.

Quel fuseau horaire cron utilise-t-il ?

Cron suit le fuseau horaire système du serveur. La plupart des serveurs cloud tournent en UTC : un rapport prévu pour 9 h à Paris peut donc partir à 10 h ou 11 h selon la saison. 9 h à Paris correspond à 8 h UTC en hiver (7 h UTC en été), donc sur un serveur UTC vous écririez 0 8 * * * en hiver.

GitHub Actions et les CronJobs Kubernetes utilisent aussi l'UTC par défaut. Comme la France passe à l'heure d'été, attendez-vous à ce que l'heure locale d'exécution se décale d'une heure deux fois par an.

Conseils d'exploitation

Dans le générateur cron d'AIBIZAP, vous choisissez « quotidien » ou « hebdomadaire » et l'expression est construite pour vous : vous obtenez la bonne planification sans mémoriser la syntaxe.

  • Répartissez les tâches lourdes sur des minutes comme :07 ou :23 plutôt que de toutes les lancer à :00.
  • Si une exécution risque de ne pas se terminer avant la suivante, ajoutez un verrou pour éviter les chevauchements.
  • L'environnement et le PATH de cron diffèrent de votre shell interactif : utilisez des chemins absolus dans les scripts.
  • Journalisez la sortie de chaque exécution pour qu'aucun échec ne passe inaperçu.

Essayez avec ces outils

Autres guides

Tous les guides