Tools Blog

Comprendre les expressions Cron : un guide pratique de l'automatisation des tâches

Cron Job Automation

Si vous avez déjà géré un serveur Linux, travaillé dans le développement back-end ou configuré des fonctions cloud automatisées, vous avez probablement rencontré une chaîne qui ressemble à ceci : 0 2 * * *. Pour les non-initiés, cela ressemble à une faute de frappe laissée sur le clavier. Pour les administrateurs système, c'est le cœur de l'automatisation des infrastructures modernes : une expression Cron.

Cron est le moteur invisible qui fait fonctionner Internet. Il garantit que votre base de données est sauvegardée à 3h00 du matin, il déclenche les e-mails que vous recevez tous les lundis matin et efface les fichiers temporaires du serveur avant qu'ils ne fassent planter le système. Mais malgré sa puissance, la syntaxe est notoirement difficile à analyser pour les humains. Dans cette plongée approfondie, nous démystifierons les astérisques et vous apprendrons à lire et à écrire des planifications cron comme un ingénieur DevOps chevronné.

Qu'est-ce que Cron et Crontab ?

Cron est un planificateur de tâches basé sur le temps que l'on trouve dans les systèmes d'exploitation informatiques de type Unix. Le nom « cron » vient du mot grec signifiant temps, chronos. Les utilisateurs qui configurent et maintiennent des environnements logiciels utilisent cron pour planifier des tâches (commandes ou scripts shell) à exécuter périodiquement à des heures, des dates ou des intervalles fixes.

La Crontab (Cron Table) est le fichier de configuration dans lequel ces planifications sont stockées. Lorsque vous modifiez votre crontab via le terminal, vous écrivez une liste d'instructions indiquant au serveur exactement quoi exécuter et quand.

Déconstruire les 5 astérisques

Une expression cron standard se compose de 5 champs séparés par des espaces blancs. Chaque champ représente une unité de temps spécifique, et ils sont toujours lus de gauche à droite dans cet ordre exact :

* * * * *  command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

Un astérisque (*) signifie « toutes les valeurs possibles pour ce champ ». Ainsi, l'expression * * * * * se traduit littéralement par : "Exécutez chaque minute, chaque heure, chaque jour, chaque mois, chaque jour de la semaine."

Modificateurs de syntaxe : étapes, plages et listes

La puissance de cron vient de ses modificateurs. Vous n'êtes pas limité à des chiffres spécifiques ou à « tout ».

1. Le modificateur d'étape (/)

Si vous souhaitez qu'un script s'exécute toutes les 15 minutes, vous utilisez une étape. */15 * * * * signifie "chaque minute divisible par 15". Il fonctionnera à 0, 15, 30 et 45 heures par heure.

2. Le modificateur de plage (-)

Si vous souhaitez qu'un script s'exécute uniquement pendant les heures de bureau, vous utilisez une plage. 0 9-17 * * * signifie "fonctionner à la minute zéro, toutes les heures de 9h à 17h".

3. Le modificateur de liste (,)

Si vous souhaitez que quelque chose s'exécute pendant des jours spécifiques et non séquentiels, utilisez une liste. 0 0 1,15 * * signifie "courir à minuit le 1er et le 15 du mois".

Arrêtez de deviner les expressions Cron

Ne risquez pas d'exécuter un script de sauvegarde toutes les minutes au lieu de chaque mois. Une seule faute de frappe peut faire planter un serveur de production. Utilisez notre générateur visuel interactif pour créer et valider des chaînes cron en toute sécurité.

Ouvrir le générateur de tâches Cron

L'erreur Cron la plus dangereuse

L'erreur la plus courante et la plus catastrophique commise par les développeurs est de confondre le champ « Minute ». Examinons un scénario dans lequel vous souhaitez exécuter un script de nettoyage de base de données une fois par heure à 2h00 du matin.

L'erreur : * 2 * * *

Si vous écrivez ce qui précède, vous dites au serveur d'exécuter le script "Chaque minute, pendant la 2ème heure de la journée". Votre script de nettoyage de base de données lourd se déclenchera 60 fois de suite, surchargeant probablement votre processeur, verrouillant les tables de base de données et provoquant une panne massive.

La bonne manière : 0 2 * * *

Cela indique explicitement au serveur de s'exécuter uniquement à "Minute zéro, de la 2ème heure". Il s'exécutera exactement une fois à 2h00 du matin.

Foire aux questions (FAQ)

Cron prend-il en compte les fuseaux horaires ?

Par défaut, cron évalue les expressions en fonction de l'heure système locale du serveur sur lequel il s'exécute. Si votre serveur est hébergé dans une région AWS à Londres, il fonctionne en UTC/GMT. Vous devez tenir compte des différences de fuseau horaire si vos utilisateurs se trouvent à New York ou à Tokyo.

Puis-je planifier une tâche cron pour qu'elle s'exécute toutes les secondes ?

Non. Le cron Unix standard est limité à une résolution d’une minute. Si vous avez besoin d'une planification en sous-minutes (par exemple toutes les 10 secondes), vous devez utiliser un outil démon distinct ou écrire un script qui s'exécute toutes les minutes mais qui boucle en interne avec les commandes de veille.

Que signifient des chaînes comme @daily ou @hourly ?

De nombreuses implémentations modernes de cron prennent en charge des macros prédéfinies non standard pour faciliter la planification. @daily est exactement le même que 0 0 * * * (minuit tous les jours). @hourly est identique à 0 * * * *. Bien qu’utiles, ils ne sont pas universellement pris en charge sur tous les systèmes existants.