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.