1. Wprowadzenie

Biblioteka Golang cron to potężne i łatwe w użyciu narzędzie umożliwiające planowanie zadań do uruchamiania o określonych godzinach lub interwałach. Jest ona wzorowana na usługę cron w systemie UNIX, ale jest zaimplementowana jako samodzielna biblioteka, którą można zintegrować z aplikacjami Go. Biblioteka cron zajmuje się planowaniem opartym na czasie, pozostawiając Tobie skupienie się na zadaniach, które mają zostać wykonane.

2. Przykład

Instalowanie biblioteki cron

Aby zacząć korzystać z biblioteki cron w projekcie, musisz najpierw ją zainstalować za pomocą polecenia go get:

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

Importowanie pakietu cron

Po zainstalowaniu, możesz zaimportować ją do swojego programu Go w następujący sposób:

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

Oto prosty przykład ustawienia zadania Cron, które wyświetla wiadomość co minutę:

package main

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

func main() {
	c := cron.New()
	c.AddFunc("0 30 * * * *", func() { fmt.Println("Co godzinę o pół do pełnej") })
	c.AddFunc("@hourly",      func() { fmt.Println("Co godzinę") })
	c.AddFunc("@every 1h30m", func() { fmt.Println("Co godzinę trzydziestu") })
	c.Start()
	..
	// Funkcje są wywoływane w swoim własnym goroutine, asynchronicznie.
	...
	// Funkcje mogą również być dodane do działającego Crona
	c.AddFunc("@daily", func() { fmt.Println("Codziennie") })
	..
	..
	c.Stop()  // Zatrzymaj harmonogram (nie zatrzymuje żadnych już uruchomionych zadań).
}

3. Format wyrażeń CRON

Wyrażenie cron reprezentuje zbiór czasów, korzystając z 6 pól oddzielonych spacją.

Nazwa pola Obowiązkowe? Dozwolone wartości Dozwolone specjalne znaki
Sekundy Tak 0-59 * / , -
Minuty Tak 0-59 * / , -
Godziny Tak 0-23 * / , -
Dzień miesiąca Tak 1-31 * / , - ?
Miesiąc Tak 1-12 lub JAN-DEC * / , -
Dzień tygodnia Tak 0-6 lub SUN-SAT * / , - ?

4. Specjalne znaki w wyrażeniach CRON

  • Asterisk ( )* Asterisk reprezentuje wszystkie możliwe wartości dla danego pola. Na przykład, gwiazdka w polu minut oznacza co minutę.
  • Slash (/) Znak ukośnika (/) służy do określania przyrostów. Na przykład, "*/15" w polu sekund oznacza co 15 sekund, począwszy od zera.
  • Przecinek (, ) Przecinek służy do wymieniania wielu dyskretnych wartości. Na przykład "PON,ŚR,PIT" w polu dni tygodnia oznacza, że zadanie będzie uruchamiane w poniedziałek, środę i piątek.
  • Myślnik (- ) Myślnik oznacza zakres wartości. "9-17" w polu godzin oznacza co godzinę od 9:00 do 17:00.
  • Znak zapytania (? ) Znak zapytania można użyć w polach dzień-miesiąca i dzień-tygodnia, aby oznaczyć "brak konkretnej wartości", co jest przydatne, gdy musisz określić wartość dla jednego pola, a nie dla drugiego.

5. Wstępnie zdefiniowane Harmonogramy

Szczegółowe wyjaśnienie dostępnych wstępnie zdefiniowanych harmonogramów, wyświetlone w formacie tabeli:

Wpis Opis Odpowiednik
@yearly (or @annually) Uruchom raz w roku, północ, 1 stycznia 0 0 0 1 1 *
@monthly Uruchom raz w miesiącu, północ, pierwszy dzień miesiąca 0 0 0 1 * *
@weekly Uruchom raz w tygodniu, północ między sobotą/niedzielą 0 0 0 * * 0
@daily (or @midnight) Uruchom raz dziennie, północ 0 0 0 * * *
@hourly Uruchom raz na godzinę, na początku godziny 0 0 * * * *

6. Interwały i harmonogram zadań o stałych odstępach czasu

Planowanie zadań do wykonania w stałych odstępach czasu jest kolejną potężną funkcją biblioteki cron. Na przykład, aby zaplanować zadanie, które uruchamia się co 2 godziny:

c.AddFunc("@every 2h", func() { fmt.Println("Zadanie uruchamia się co dwie godziny") })

7. Strefy czasowe i harmonogram zadań

Interpretacja i harmonogram są wykonywane w strefie czasowej lokalnej dla maszyny, na której działa aplikacja Go. Należy uważać podczas zmian czasu letniego, ponieważ pewne czasy mogą nie istnieć lub być powtórzone.

8. Bezpieczeństwo wątków i synchronizacja

Biblioteka cron została zaprojektowana tak, aby była bezpieczna wątkowo i współbieżna. Dla wywołującego jest kluczowe zachowanie poprawnej kolejności wywołań metod w celu uniknięcia wyścigów. Należy używać odpowiednich mechanizmów synchronizacji, gdy jest to konieczne, aby zapewnić, że zadania są zaplanowane i wykonane poprawnie.