1. Introduction
La bibliothèque de tâches planifiées Golang est un outil puissant et facile à utiliser qui permet de planifier l'exécution de tâches à des moments ou à des intervalles spécifiques. Elle est modélisée d'après le service cron UNIX, mais est implémentée en tant que bibliothèque autonome pouvant être intégrée dans des applications Go. La bibliothèque de tâches planifiées se charge de la planification basée sur le temps, vous permettant de vous concentrer sur la tâche qui doit être exécutée.
2. Example
Installation de la bibliothèque de tâches planifiées
Pour commencer à utiliser la bibliothèque de tâches planifiées dans votre projet, vous devez d'abord l'installer à l'aide de la commande go get
:
go get github.com/robfig/cron/[email protected]
Importer le package cron
Après l'installation, vous pouvez l'importer dans votre programme Go comme suit :
import "github.com/robfig/cron/v3"
Voici un exemple simple de configuration d'une tâche Cron qui affiche un message toutes les minutes :
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
c.AddFunc("0 30 * * * *", func() { fmt.Println("Toutes les heures et demie") })
c.AddFunc("@hourly", func() { fmt.Println("Toutes les heures") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Toutes les heures trente") })
c.Start()
..
// Les fonctions sont invoquées dans leur propre goroutine, de manière asynchrone.
...
// Les fonctions peuvent également être ajoutées à un Cron en cours d'exécution
c.AddFunc("@daily", func() { fmt.Println("Tous les jours") })
..
..
c.Stop() // Arrête le planificateur (ne met pas fin à l'exécution des tâches déjà en cours).
}
3. Format de l'expression CRON
Une expression cron représente un ensemble de temps, en utilisant 6 champs séparés par des espaces.
Nom du champ | Obligatoire? | Valeurs autorisées | Caractères spéciaux autorisés |
---|---|---|---|
Secondes | Oui | 0-59 | * / , - |
Minutes | Oui | 0-59 | * / , - |
Heures | Oui | 0-23 | * / , - |
Jour du mois | Oui | 1-31 | * / , - ? |
Mois | Oui | 1-12 ou JAN-DEC | * / , - |
Jour de la semaine | Oui | 0-6 ou SUN-SAT | * / , - ? |
4. Caractères spéciaux dans les expressions CRON
- Asterisk ( * ) L'astérisque représente toutes les valeurs possibles pour le champ donné. Par exemple, un astérisque dans le champ des minutes signifie chaque minute.
- Slash ( / ) Le caractère slash est utilisé pour spécifier des incréments. Par exemple, "*/15" dans le champ des secondes signifie toutes les 15 secondes à partir de zéro.
- Virgule ( , ) Le caractère virgule est utilisé pour énumérer plusieurs valeurs distinctes. Par exemple, "LUN, MER, VEN" dans le champ du jour de la semaine signifie que la tâche s'exécutera le lundi, le mercredi et le vendredi.
- Trait d'union ( - ) Le trait d'union représente une plage de valeurs. "9-17" dans le champ des heures indique toutes les heures de 9h à 17h.
- Point d'interrogation ( ? ) Le point d'interrogation peut être utilisé dans les champs du jour du mois et du jour de la semaine pour signifier "aucune valeur spécifique", ce qui est utile lorsque vous devez spécifier une valeur pour l'un et pas pour l'autre.
5. Horaires prédéfinis
Explication détaillée des horaires prédéfinis disponibles, affichée sous forme de tableau :
Entrée | Description | Équivalent à |
---|---|---|
@yearly (ou @annually) | S'exécute une fois par an, à minuit, le 1er janv. | 0 0 0 1 1 * |
@monthly | S'exécute une fois par mois, à minuit, le premier du mois | 0 0 0 1 * * |
@weekly | S'exécute une fois par semaine, à minuit entre samedi/dimanche | 0 0 0 * * 0 |
@daily (ou @midnight) | S'exécute une fois par jour, à minuit | 0 0 0 * * * |
@hourly | S'exécute une fois par heure, au début de l'heure | 0 0 * * * * |
6. Intervals and Fixed Intervals Scheduling
La planification des tâches pour qu'elles s'exécutent à des intervalles fixes est une autre fonctionnalité puissante de la bibliothèque cron. Par exemple, pour planifier une tâche qui s'exécute toutes les 2 heures :
c.AddFunc("@every 2h", func() { fmt.Println("La tâche s'exécute toutes les deux heures") })
7. Fuseaux horaires et planification des tâches
L'interprétation et la planification sont effectuées dans le fuseau horaire local de la machine où s'exécute l'application Go. Il est important de faire attention lors des changements d'heure d'été, car certains moments peuvent ne pas exister ou être répétés.
8. Sécurité des threads et synchronisation
La bibliothèque cron est conçue pour être sécurisée au niveau des threads et concurrente. Il est crucial pour l'appelant de maintenir une séquence correcte des invocations de méthodes pour éviter les conditions de concurrence. Des mécanismes de synchronisation appropriés doivent être utilisés au besoin pour garantir que les tâches sont planifiées et exécutées correctement.