Crontab Guru
Wklej wyrażenie cron i otrzymaj wyjaśnienie pola po polu, w prostym angielskim, co ono robi. Nie musisz pamiętać kolejności pól ani sprawdzać zakresów: Guru przechodzi przez każde z pięciu pól (minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia) i czyta wyrażenie od lewej do prawej. Przydatne, aby sprawdzić linię crontab przed wdrożeniem lub wyjaśnić linię, którą przejąłeś.
Jak korzystać z Guru
-
1
Wklej wyrażenie
Skopiuj dowolne standardowe wyrażenie cron z 5 polami (na przykład `0 9 * * 1-5`) do pola wprowadzania.
-
2
Poproś o wyjaśnienie
Kliknij Explain Cron, a narzędzie zwróci opis każdego pola wiersz po wierszu: minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia.
-
3
Przeczytaj opis
Wyjaśnienie jest generowane po angielsku, na przykład "Minute: every 5 minutes" lub "Hour: from 9 through 17."
-
4
Sprawdź przed wdrożeniem
Użyj wyjaśnienia, aby potwierdzić, że harmonogram robi to, czego chcesz, zanim umieścisz go w crontab, konfiguracji CI lub manifeście Kubernetes.
Ściąga z pól
┌───────────── minuta (0-59)
│ ┌─────────── godzina (0-23)
│ │ ┌───────── dzień miesiąca (1-31)
│ │ │ ┌─────── miesiąc (1-12 lub JAN-DEC)
│ │ │ │ ┌───── dzień tygodnia (0-6 lub SUN-SAT; niedziela = 0 lub 7)
│ │ │ │ │
* * * * *
Operatory w wyrażeniach cron
| Operator | Znaczenie | Przykład |
|---|---|---|
* |
Każda wartość | * * * * * |
, |
Lista wartości | 0,15,30,45 |
- |
Zakres | 9-17 |
/ |
Krok (początek/krok) | */5, 0-30/5 |
L |
Ostatni (ostatni dzień miesiąca lub ostatni pasujący dzień tygodnia, Quartz) | L, 5L |
W |
Najbliższy dzień roboczy | 15W (Quartz) |
# |
N-ty pasujący dzień tygodnia w miesiącu | 1#3 (Quartz) |
? |
Brak konkretnej wartości | Tylko Quartz |
Kolejność czytania ma znaczenie
0 */2 * * 1-5 czyta się od lewej do prawej jako: minuta 0, co 2 godziny, dowolny dzień miesiąca, dowolny miesiąc, od poniedziałku do piątku. Z przyzwyczajenia ludzie czasem czytają pola od prawej do lewej i się gubią; zawsze zaczynaj od minuty.
Pułapka „co X minut”
*/10 * * * * uruchamia się w minutach 0, 10, 20, 30, 40 i 50, a nie „co 10 minut od momentu utworzenia zadania”. Krok w cronie zawsze liczy się od początku zakresu danego pola. Jeśli wdrożysz zadanie o 12:03, pierwsze uruchomienie nastąpi o 12:10, a nie o 12:13.
Dla zadań, które naprawdę wymagają „N minut po ostatnim uruchomieniu”, użyj harmonogramu z trwałym licznikiem czasu (timery systemd z OnUnitActiveSec lub harmonogramowanie na poziomie aplikacji z zapisanym znacznikiem czasu ostatniego uruchomienia).
Pułapki cron, które warto znać
- Ustawiony jednocześnie dzień miesiąca i dzień tygodnia: większość implementacji crona traktuje to jako zachowanie LUB, czego najpewniej nie chcesz.
- Krok 0:
*/0jest nieprawidłowy. - Zakres przechodzący przez północ:
22-2dla godzin nie działa w klasycznym cronie; użyj22-23,0-2. - 30 lutego: harmonogram w stylu
0 0 30 2 *nigdy się nie uruchomi. - Niejednoznaczność czasu letniego (DST): zadania zaplanowane między 2:00 a 3:00 w dni zmiany czasu mogą uruchomić się dwukrotnie albo wcale.
Cron a nowoczesne harmonogramy
Cron z Uniksa jest wciąż wszędzie, ale do czegoś krytycznego prawdopodobnie będziesz potrzebować jednego z tych rozwiązań:
- Timery systemd: nadrabiają pominięte uruchomienia, obsługują losowe przesunięcia i czytają konfigurację z plików jednostek.
- Kubernetes CronJob: deklaratywny, z ponawianiem prób, uwzględnia strefy czasowe w wersji 1.25 i nowszych.
- Airflow / Prefect / Dagster: do zadań z zależnościami, ponawianiem, uzupełnianiem danych (backfill) i obserwowalnością.
- Harmonogram GitHub Actions: cron z 5 polami, tylko UTC, minimalny odstęp 5 minut, dostarczanie na zasadzie best-effort.
Sam cron to świetny format, ale kiepski harmonogram dla zadań, których nie wolno pominąć.
Najczęściej zadawane pytania
Bo w standardowym cronie dzień tygodnia 0 to niedziela (7 również jest niedzielą, dzięki czemu obsługiwane są obie konwencje). Poniedziałek to 1. Quartz numeruje dni tygodnia od 1 do 7, przy czym niedziela = 1, co często myli osoby przechodzące między różnymi implementacjami.
Klasyczny cron w systemie Unix działa w lokalnej strefie czasowej serwera, czyli tej wskazanej w /etc/timezone. Kubernetes CronJob, GitHub Actions i większość harmonogramów chmurowych domyślnie działa w UTC. Zawsze to sprawdzaj i w miarę możliwości używaj UTC, aby uniknąć niespodzianek związanych z czasem letnim.
Klasyczny cron nie potrafi wyrazić tego bezpośrednio. Obejście: uruchamiaj skrypt w każdy poniedziałek i sprawdzaj datę wewnątrz niego: [ $(date +%d) -le 7 ] && ./job.sh. Quartz obsługuje to natywnie za pomocą 1#1.
Nie. Każdy harmonogram potrzebuje własnej linii. Możesz jednak połączyć kilka pór w jedną linię za pomocą list: 0 9,17 * * * uruchamia się o 9:00 i o 17:00. W przypadku harmonogramów, których nie da się zapisać w jednej linii, dodaj kilka linii wskazujących na to samo polecenie.
Powiązane narzędzia
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Generator losowych liter
Generuj losowe litery A-Z. Wybierz liczbę, wielkie litery, małe litery lub zapis mieszany i użyj wyniku w grach, zadaniach lub lekcjach.
Konwerter ASCII na binarny
Konwertuj dowolny ciąg ASCII na reprezentację binarną. Każdy znak staje się ośmioma bitami, rozdzielonymi spacjami, gotowymi do wklejenia w ślad protokołu albo zadanie domowe.
Próbnik kolorów HEX
Wybierz lub wpisz kolor HEX i sprawdź RGB, HSL, przybliżone CMYK, luminancję względną oraz kontrast z bielą i czernią.