Explorez la flexibilité des expressions Cron et apprenez à exploiter leur puissance pour planifier vos tâches récurrentes avec précision.

Introduction

Cron

Cron est un programme de planification de tâches largement utilisé dans les systèmes Unix et Linux. Conçu dans les années 1970, Cron est devenu un élément essentiel dans le paysage de l'automatisation des tâches informatique, permettant aux utilisateurs de programmer l'exécution de scripts et de commandes à des intervalles réguliers.

Sa principale fonctionnalité repose sur les expressions Cron qui spécifient quand une tâche doit s'exécuter. Ces expressions offrent une flexibilité et une précision remarquables pour la planification de tâches récurrentes.

CRON est ainsi devenu un outil incontournable pour les administrateurs système et les développeurs pour gérer efficacement les tâches automatisées et maintenir les opérations régulières des systèmes.

Expressions Cron

Les expressions Cron, initialement conçues pour l'application Cron, ont une portée bien plus vaste aujourd'hui. Leur syntaxe a été adoptée par des orchestrateurs de conteneurs, des plateformes d'automatisation de workflows, et même des services cloud, pour la planification de tâches automatisées.

De plus, l'universalité des expressions Cron a conduit au développement de nombreuses bibliothèques dans différents langages de programmation, comme Python, Java, JavaScript, et C#. Ces bibliothèques permettent aux développeurs d'intégrer facilement la planification basée sur les expressions Cron dans leurs applications, offrant une méthode standardisée et reconnue pour gérer les tâches récurrentes.

Les Expressions Cron en Détails

Une expression Cron est une chaîne composée de cinq champs différents, séparés par un espace blanc. Chaque champ peut comprendre n'importe laquelle des valeurs autorisées pour cette unité de temps spécifique, ainsi que différentes variantes des caractères spéciaux autorisés pour ce champ. Les champs représentent respectivement les minutes, les heures, le jour du mois, le mois et le jour de la semaine.

                                           Valeurs              Caractères spéciaux
                  
┌──────────── minute                       0-59                 * , - /                      
│ ┌──────────── heure                      0-23                 * , - /                      
│ │ ┌──────────── jour du mois             1-31                 * , - / L W                
│ │ │ ┌──────────── mois                   1-12 ou JAN-DEC      * , - /                      
│ │ │ │ ┌──────────── jour de la semaine   0-6  ou SUN-SAT      * , - / # L
│ │ │ │ │
* * * * *

Valeurs

ChampDescriptionValeurs
MinuteSpécifie la minute exacte de l'heure à laquelle la tâche doit s'exécuter.0-59
HeureSpécifie l'heure exacte du jour (format 24 heures) à laquelle la tâche doit s'exécuter.0-23
Jour du moisSpécifie le jour du mois à laquelle la tâche doit s'exécuter. Notez que tous les mois n'ont pas 31 jours, donc une tâche prévue pour le 31ème jour s'exécutera uniquement dans les mois qui ont un 31ème jour.1-31
MoisSpécifie le mois de l'année pendant lequel la tâche doit s'exécuter.1-12 ou
jan, fev, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
Jour de la semaineSpécifie le jour de la semaine à laquelle la tâche doit s'exécuter.0-7 (où 0 et 7 signifie dimanche) ou
sun, mon, tue, wed, thu, fri, sat
Tableau des valeurs autorisées par champ.

Caractères spéciaux

Minutes

CaractèreDescription
'*' (astérisque)Utilisé pour représenter "chaque" minute. Par exemple, * dans le champ des minutes signifie "chaque minute".
'-' (tiret)Définit une plage de temps. Par exemple, 1-5 dans les minutes signifie de la 1ère à la 5ème minute.
',' (virgule)Permet de spécifier des minutes multiples et distinctes. Par exemple, 9,17 dans les minutes signifie à la 9ème minute et à la 17ème minute.
'/' (slash)Spécifie un incrément. Par exemple, */15 dans les minutes signifie "toutes les 15 minutes".
Description des caractères spéciaux des minutes.

Heures

CaractèreDescription
'*' (astérisque)Utilisé pour représenter "chaque" heure. Par exemple, * dans le champ des heures signifie "chaque heure".
'-' (tiret)Définit une plage de temps. Par exemple, 12-14 dans les heures signifie de midi à quatorze heure.
',' (virgule)Permet de spécifier des heures multiples et distinctes. Par exemple, 8,18 dans les heures signifie 8h00 et 18h00.
'/' (slash)Spécifie un incrément. Par exemple, */6 dans les heures signifie "toutes les 6 heures".
Description des caractères spéciaux des heures.

Jour du mois

CaractèreDescription
'*' (astérisque)Signifie "chaque jour du mois".
'-' (tiret)Définit une plage de jours. Par exemple, 1-10 signifie du 1er au 10ème jour du mois.
',' (virgule)Permet de spécifier plusieurs jours non consécutifs. Par exemple, 3,7,15 signifie les jours 3, 7 et 15 du mois.
'/' (slash)Incrémente les jours. */3 signifie "tous les 3 jours".
'L'Représente le dernier jour du mois.
'W'Spécifie le jour ouvrable le plus proche d'un jour donné. 15W signifie le jour ouvrable le plus proche du 15ème jour. Ainsi, si le 15 est un samedi, le déclenchement aura lieu le vendredi 14. Si le 15 est un dimanche, le déclenchement aura lieu le lundi 16. Si le 15 est un mercredi, le déclenchement aura lieu le mercredi 15. Toutefois, si vous définissez 1W comme la valeur du jour du mois, et que le 1er est un samedi, le déclencheur se déclenchera le lundi 3, car il ne « passera » pas la limite des jours d’un mois. Veuillez noter que le caractère « W » ne peut être spécifié que lorsque le jour du mois est un jour unique, et non une plage ou une liste de jours.
Description des caractères spéciaux des jours du mois.

Mois

CaractèreDescription
'*' (astérisque)Signifie "chaque mois".
'-' (tiret)Définit une plage de mois. Par exemple, 3-5 signifie mars à mai.
',' (virgule)Permet de spécifier plusieurs mois distincts. Par exemple, Jan,Mar,Jul signifie janvier, mars et juillet.
'/' (slash)Incrémente les mois. */6 signifie "tous les six mois".
Description des caractères spéciaux des mois.

Jour de la semaine

CaractèreDescription
'*' (astérisque)Signifie "chaque jour de la semaine".
'-' (tiret)Définit une plage de jours. Par exemple, 1-3 signifie du lundi au mercredi.
',' (virgule)Permet de spécifier plusieurs jours distincts. Par exemple, Mon,Wed,Fri signifie lundi, mercredi et vendredi.
'/' (slash)Incrémente les jours de la semaine. */2 signifie "tous les deux jours de la semaine".
'L'Utilisé pour le "dernier" spécifique. Par exemple, 5L signifie le dernier vendredi du mois.
'#' (dièse)Utilisé pour spécifier le "nième" jour d'une semaine dans un mois. 3#2 représente le deuxième mercredi du mois. Notez que si vous spécifiez 3#5 et qu’il n’y a pas de 5ème mercredi dans ce mois, il n’y aura aucun déclenchement ce mois-là.
Description des caractères spéciaux des jours de la semaine.

Exemples

Voici quelques exemples d'expression:

ExpressionDescription
0 1 * * *Exécute la tâche chaque jour à une heure du matin.
0 * * * *Exécute la tâche à chaque début d'heure.
30 13 * * MonExécute la tâche tous les lundis à 13h30.
0 9,17 * * 1-5Exécute la tâche tous les jours ouvrables à 9h00 et 17h00.
0 14 * * Wed#3Exécute la tâche le troisième mercredi de chaque mois à 14h00.
0 */2 * * Sat,SunExécute la tâche toutes les deux heures pendant les week-ends.
0 18 * * FriLExécute la tâche le dernier vendredi de chaque mois à 18h00.
0-10/2 * * * *Exécute la tâche toutes les 2 minutes dans l'intervalle de 0 à 10 minutes de chaque heure.
Donc, la tâche s'exécutera à 0, 2, 4, 6, 8, et 10 minutes de l'heure.
Quelques exemples d'expressions CRON.

Macros

Certaines implémentations de Cron incluent des "macros" ou des alias prédéfinis qui représentent des expressions Cron courantes. Ces macros offrent un moyen pratique de spécifier des horaires de tâches communs sans avoir à écrire l'expression Cron complète. Voici quelques exemples de macros Cron standard, bien que leur disponibilité puisse varier selon l'outil ou la plateforme :

MacroEquivalentDescription
@yearly ou @annually0 0 1 1 *Exécute la tâche une fois par an à minuit le 1er janvier.
@monthly0 0 1 * *Exécute la tâche une fois par mois à minuit le premier jour du mois.
@weekly0 0 * * 0Exécute la tâche une fois par semaine à minuit le dimanche.
@midnight0 0 * * *Exécute la tâche une fois par jour à minuit.
@every_minute* * * * *Exécute la tâche toutes les minutes.
Exemples de macros.

NOTE

Il est important de noter qu'il existe également des implémentations plus complexes d'expressions Cron. Certaines peuvent inclure un sixième champ pour les secondes, offrant une granularité plus fine dans la planification. D'autres peuvent intégrer des fonctionnalités avancées, telles que la génération aléatoire de temps d'exécution (R dans certaines syntaxes), mais ces caractéristiques dépendent spécifiquement de l'application ou de la bibliothèque utilisée. Pour comprendre et utiliser ces fonctionnalités avancées, il est essentiel de se référer à la documentation de l'outil ou du système en question, car la syntaxe et le comportement exacts peuvent varier.

Conclusion

Dans cet article, vous avez pu découvrir ce qu'étaient les expressions Cron, en particulier la flexibilité qu'elles offrent pour programmer l'exécution de tâches. Nous avons exploré en détail leur format et avons vu comment ces expressions peuvent être utilisées pour spécifier des horaires précis, des répétitions périodiques, et bien plus encore.

Nous avons également souligné l'importance de consulter la documentation spécifique de votre outil ou de votre bibliothèque, car chaque implémentation de Cron peut introduire des extensions ou des fonctionnalités uniques. Cela garantit que vous pouvez tirer pleinement parti de cet outil puissant.

Si vous êtes prêt à passer à l'étape suivante et à mettre en œuvre des tâches planifiées en ASP .NET, je vous invite à consulter un article complémentaire qui vous guidera à travers l'implémentation pratique d'une application ASP .NET utilisant les expressions CRON pour automatiser des tâches régulières.

Références

  • Wikipedia: présentation de l'application Cron
  • Crontab.guru: un éditeur simple et rapide pour les expressions de planification cron.
  • ASP.Net Cron Worker: automatisez vos tâches récurrentes dans vos applications ASP.Net Core grâce aux workers, aux expressions Cron et plus si affinité.