Expressions Cron expliquées : syntaxe, exemples et modèles courants

· 12 min de lecture

Cron est le planificateur de tâches basé sur le temps qui alimente l'automatisation sur les systèmes d'exploitation de type Unix. Que vous sauvegardiez des bases de données, envoyiez des emails programmés ou exécutiez des scripts de maintenance, comprendre les expressions cron est essentiel pour tout développeur ou administrateur système.

Ce guide complet détaille tout ce que vous devez savoir sur la syntaxe cron, des modèles de base aux techniques de planification avancées. Vous apprendrez à écrire, tester et dépanner les expressions cron en toute confiance.

Table des matières

Comprendre les bases de Cron

Cron est un processus démon qui s'exécute en continu en arrière-plan des systèmes de type Unix, vérifiant chaque minute s'il y a des tâches planifiées à exécuter. Le nom vient du mot grec « chronos », signifiant temps.

Chaque utilisateur sur un système peut avoir son propre fichier crontab (table cron) contenant des tâches planifiées. Le système maintient également des crontabs pour les tâches au niveau système dans des répertoires comme /etc/cron.d/, /etc/cron.daily/ et /etc/cron.hourly/.

Lorsqu'une tâche cron s'exécute, elle s'exécute avec les permissions de l'utilisateur qui possède le crontab. Ceci est crucial pour les considérations de sécurité et d'accès aux fichiers. La tâche s'exécute dans un environnement minimal sans votre configuration shell habituelle, ce qui est une source courante de confusion pour les débutants.

Conseil pro : Les tâches Cron n'ont pas accès à votre environnement shell interactif. Utilisez toujours des chemins absolus pour les commandes et fichiers, et définissez explicitement toutes les variables d'environnement requises dans votre crontab.

Syntaxe Cron : les cinq champs

Une expression cron standard se compose de cinq champs de date et d'heure suivis de la commande à exécuter. Comprendre ces champs est fondamental pour écrire des planifications cron efficaces.

┌───────────── minute (0-59)
│ ┌───────────── heure (0-23)
│ │ ┌───────────── jour du mois (1-31)
│ │ │ ┌───────────── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌───────────── jour de la semaine (0-7, 0 et 7 = dimanche, ou SUN-SAT)
│ │ │ │ │
* * * * * commande à exécuter

Chaque champ accepte des valeurs spécifiques et des caractères spéciaux qui contrôlent quand la tâche s'exécute. Décomposons ce que chaque champ représente :

Champ Plage Caractères spéciaux Description
Minute 0-59 * , - / La minute exacte où la tâche s'exécute
Heure 0-23 * , - / Heure au format 24 heures (0 = minuit)
Jour du mois 1-31 * , - / L W Le jour du mois
Mois 1-12 ou JAN-DEC * , - / Mois de l'année (1 = janvier)
Jour de la semaine 0-7 ou SUN-SAT * , - / L # Jour de la semaine (0 et 7 = dimanche)

Le champ de commande peut être n'importe quelle commande shell valide, chemin de script ou série de commandes séparées par des points-virgules. La sortie des tâches cron est généralement envoyée par email à l'utilisateur sauf si elle est redirigée.

Caractères spéciaux et opérateurs

La puissance de Cron vient de ses caractères spéciaux qui permettent des modèles de planification flexibles. Maîtriser ces opérateurs vous permet de créer des planifications sophistiquées sans logique complexe.

L'astérisque (*) - Correspond à toutes les valeurs

L'astérisque est le caractère générique qui correspond à toutes les valeurs possibles pour un champ. Lorsque vous utilisez * dans un champ, la tâche s'exécute pour chaque valeur dans la plage de ce champ.

Par exemple, * * * * * signifie « chaque minute de chaque heure de chaque jour de chaque mois chaque jour de la semaine » - en d'autres termes, chaque minute.

La virgule (,) - Lister plusieurs valeurs

Les virgules vous permettent de spécifier plusieurs valeurs discrètes. Ceci est utile lorsque vous avez besoin d'heures spécifiques non consécutives.

Exemple : 0 9,12,15,18 * * * s'exécute à 9h, midi, 15h et 18h chaque jour.

Le trait d'union (-) - Définir des plages

Les traits d'union créent des plages inclusives de valeurs. C'est plus propre que de lister de nombreuses valeurs consécutives avec des virgules.

Exemple : 0 9-17 * * 1-5 s'exécute chaque heure de 9h à 17h, du lundi au vendredi (heures de bureau).

La barre oblique (/) - Valeurs d'intervalle

L'opérateur barre oblique spécifie des intervalles d'étape. La syntaxe est */n ou plage/n où n est la valeur d'étape.

Exemple : */15 * * * * s'exécute toutes les 15 minutes (à :00, :15, :30, :45). Vous pouvez également utiliser des plages : 0-30/5 * * * * s'exécute toutes les 5 minutes pendant la première moitié de chaque heure.

Caractères étendus (L, W, #)

Ce sont des extensions non standard prises en charge par certaines implémentations cron comme Vixie cron et le planificateur Quartz, mais pas par le cron Unix standard.

Caractère Signification Exemple Description
L Dernier 0 0 L * * Dernier jour du mois à minuit
W Jour de semaine 0 0 15W * * Jour de semaine le plus proche du 15
# Nième occurrence 0 0 * * 5#3 Troisième vendredi de chaque mois

Conseil rapide : Avant d'utiliser les caractères L, W ou #, vérifiez que votre implémentation cron les prend en charge. Le cron Unix standard rejettera ces expressions. Utilisez notre Générateur d'expressions Cron pour tester la compatibilité.

Modèles Cron courants

Voici les modèles cron les plus fréquemment utilisés que vous rencontrerez dans les applications réelles. Ceux-ci couvrent la majorité des besoins de planification pour les tâches d'automatisation typiques.

Intervalles de temps de base

Planifications quotidiennes

Planifications hebdomadaires

Planifications mensuelles et annuelles

Conseil pro : Lors de la planification de tâches mensuelles, soyez prudent avec les valeurs de jour du mois supérieures à 28. L'utilisation de 0 0 31 * * ne s'exécutera que dans les mois ayant 31 jours. Pour les tâches de fin de mois, envisagez d'utiliser le dernier jour du mois précédent ou le premier jour du mois suivant à la place.

Testez et validez vos expressions cron en utilisant notre Analyseur d'expressions Cron pour voir exactement quand vos tâches s'exécuteront.

Techniques de planification avancées

Au-delà des modèles de base, vous pouvez combiner des opérateurs et des champs pour créer des planifications sophistiquées qui correspondent à des exigences métier complexes.

Combiner plusieurs conditions

Vous pouvez utiliser plusieurs opérateurs dans un seul champ pour créer des planifications nuancées. Par exemple, 0 9,12,15 * * 1-5 s'exécute à 9h, midi et 15h, mais uniquement les jours de semaine.

Autre exemple : */10 8-17 * * 1-5 s'exécute toutes les 10 minutes, mais uniquement pendant les heures de bureau (8h à 17h) les jours de semaine.

Jour du mois vs jour de la semaine

Lorsque le jour du mois et le jour de la semaine sont tous deux spécifiés (pas *), la tâche s'exécute lorsque l'une ou l'autre condition est remplie (logique OU, pas ET). C'est une source courante de confusion.

Par exemple, 0 0 13 * 5 s'exécute à minuit le 13 de chaque mois OU chaque vendredi, pas seulement le vendredi 13.

Pour planifier quelque chose spécifiquement pour le vendredi 13, vous devriez utiliser un script qui vérifie les deux conditions :

0 0 13 * * [ $(date +\%u) -eq 5 ] && /path/to/script.sh

Utiliser les valeurs d'intervalle avec les plages

Vous pouvez combiner des plages et des valeurs d'intervalle pour un contrôle précis. La syntaxe début-fin/intervalle s'exécute à intervalles dans une plage spécifique.

Exemples :