1. Einführung

Die Golang-Cron-Bibliothek ist ein leistungsstolles und benutzerfreundliches Tool, mit dem Aufgaben zu bestimmten Zeiten oder Intervallen geplant werden können. Sie orientiert sich an dem UNIX-Cron-Dienst, wurde jedoch als eigenständige Bibliothek implementiert, die in Go-Anwendungen integriert werden kann. Die Cron-Bibliothek kümmert sich um die zeitbasierte Planung, sodass Sie sich auf die auszuführende Aufgabe konzentrieren können.

2. Beispiel

Installation der Cron-Bibliothek

Um die Cron-Bibliothek in Ihrem Projekt zu verwenden, müssen Sie diese zunächst mit dem go get-Befehl installieren:

go get github.com/robfig/cron/[email protected]

Import der Cron-Bibliothek

Nach der Installation können Sie die Bibliothek in Ihr Go-Programm wie folgt importieren:

import "github.com/robfig/cron/v3"

Hier ist ein einfaches Beispiel, wie Sie einen Cron-Job einrichten, der jede Minute eine Nachricht ausgibt:

package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
)

func main() {
    c := cron.New()
    c.AddFunc("0 30 * * * *", func() { fmt.Println("Jede Stunde zur halben Stunde") })
    c.AddFunc("@hourly",      func() { fmt.Println("Jede Stunde") })
    c.AddFunc("@every 1h30m", func() { fmt.Println("Jede Stunde dreißig") })
    c.Start()
    ..
    // Funktionen werden in ihrem eigenen Goroutine asynchron aufgerufen.
    ...
    // Funktionen können auch einem laufenden Cron hinzugefügt werden
    c.AddFunc("@daily", func() { fmt.Println("Jeden Tag") })
    ..
    ..
    c.Stop()  // Stoppt den Zeitplaner (stoppt keine bereits laufenden Jobs).
}

3. CRON-Ausdrucksformat

Ein Cron-Ausdruck stellt eine Gruppe von Zeiten dar und verwendet 6 durch Leerzeichen getrennte Felder.

Feldname Obligatorisch? Erlaubte Werte Erlaubte Sonderzeichen
Sekunden Ja 0-59 * / , -
Minuten Ja 0-59 * / , -
Stunden Ja 0-23 * / , -
Tag des Monats Ja 1-31 * / , - ?
Monat Ja 1-12 oder JAN-DEC * / , -
Wochentag Ja 0-6 oder SUN-SAT * / , - ?

4. Sonderzeichen in CRON-Ausdrücken

  • Asterisk ( * ) Der Asterisk repräsentiert alle möglichen Werte für das jeweilige Feld. Zum Beispiel steht ein Asterisk im Minutenfeld für jede Minute.
  • Schrägstrich ( / ) Das Schrägstrichzeichen wird verwendet, um Inkremente anzugeben. Beispielsweise bedeutet "*/15" im Sekundenfeld alle 15 Sekunden ab null.
  • Komma ( , ) Das Komma wird verwendet, um mehrere diskrete Werte aufzulisten. "MON, MIT, FRE" im Wochentagsfeld bedeutet beispielsweise, dass der Job am Montag, Mittwoch und Freitag ausgeführt wird.
  • Bindestrich ( - ) Der Bindestrich kennzeichnet einen Wertebereich. "9-17" im Stundenfeld gibt jede Stunde von 9 bis 17 Uhr an.
  • Fragezeichen ( ? ) Das Fragezeichen kann in den Feldern Tag des Monats und Wochentag verwendet werden, um 'kein spezifischen Wert' zu kennzeichnen, was nützlich ist, wenn Sie einen Wert für eines und nicht das andere angeben müssen.

5. Vordefinierte Zeitpläne

Detaillierte Erklärung der verfügbaren vordefinierten Zeitpläne, dargestellt in einer tabellarischen Form:

Eintrag Beschreibung Äquivalent zu
@yearly (oder @annually) Einmal pro Jahr, Mitternacht, 1. Januar 0 0 0 1 1 *
@monthly Einmal pro Monat, Mitternacht, erster des Monats 0 0 0 1 * *
@weekly Einmal pro Woche, Mitternacht zwischen Sa/So 0 0 0 * * 0
@daily (oder @midnight) Einmal am Tag, Mitternacht 0 0 0 * * *
@hourly Einmal pro Stunde, zu Beginn der Stunde 0 0 * * * *

6. Intervalle und Fixe Intervallplanung

Die Planung von Aufgaben zur Ausführung in festen Intervallen ist eine weitere leistungsstarke Funktion der Cron-Bibliothek. Zum Beispiel, um eine Aufgabe zu planen, die alle 2 Stunden ausgeführt wird:

c.AddFunc("@every 2h", func() { fmt.Println("Aufgabe wird alle zwei Stunden ausgeführt") })

7. Zeitzonen und Aufgabenplanung

Die Interpretation und Planung erfolgen in der lokalen Zeitzone der Maschine, auf der die Go-Anwendung ausgeführt wird. Es ist wichtig, während der Zeitumstellung auf die Sommerzeit sicherzustellen, dass bestimmte Zeiten möglicherweise nicht existieren oder wiederholt werden.

8. Thread-Sicherheit und Synchronisierung

Die Cron-Bibliothek ist darauf ausgelegt, thread-sicher und konkurrierend zu sein. Es ist für den Aufrufer entscheidend, eine korrekte Abfolge von Methodenaufrufen beizubehalten, um Wettlaufbedingungen zu vermeiden. Erforderlichenfalls müssen geeignete Synchronisierungsmechanismen verwendet werden, um sicherzustellen, dass Aufgaben korrekt geplant und ausgeführt werden.