Przejdź do treści
Quaestio

Wyrażenie cron

Narzędzie działa w obie strony: wpisz harmonogram w formacie crontab, aby zobaczyć jego objaśnienie, albo opisz harmonogram słowami, aby otrzymać wyrażenie.

Pięć pól: minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia. Na początku może stać szóste pole na sekundy.

Przykłady

Oznacza

Co 15 min, zakres: 5–59, w godzinach: 9–17, w dni tygodnia: poniedziałek–piątek

Pole po polu

PoleWyrażenieWartości
Minuta5-59/155, 20, 35, 50
Godzina9-179, 10, 11, 12, 13, 14, 15, 16, 17
Dzień miesiąca*wszystkie
Miesiąc*wszystkie
Dzień tygodniaMON-FRIponiedziałek, wtorek, środa, czwartek, piątek

Najbliższe uruchomienia

Harmonogram według

…

Czas letni jest obsługiwany jak w Vixie cron i cronie: stała godzina uruchamia się raz, nawet jeśli godzina zostanie pominięta lub powtórzona, a zadania z * w minutach lub godzinach idą za nowym zegarem.

Osadź

Osadź to narzędzie na swojej stronie

Skopiuj kod i wklej go tam, gdzie ma się pojawić narzędzie, np. we wpisie na blogu albo na stronie szkoły. To nic nie kosztuje, ramka nie zawiera reklam, a narzędzie liczy w przeglądarce odwiedzającego.

Jak to działa

Wyrażenie cron ma pięć pól oddzielonych spacjami: minutę (0–59), godzinę (0–23), dzień miesiąca (1–31), miesiąc (1–12) i dzień tygodnia (0–7, gdzie zarówno 0, jak i 7 to niedziela). Co minutę cron sprawdza, czy zegar pasuje do wszystkich pól, i jeśli tak, uruchamia zadanie.

W każdym polu * oznacza każdą wartość, 1-5 zakres, 1,15 listę, a */15 co piętnastą wartość. Kroki można też łączyć z zakresami: 5-59/15 daje minuty 5, 20, 35 i 50. Miesiące i dni tygodnia można zapisywać angielskimi skrótami, JAN–DEC i SUN–SAT.

Gdy ograniczony jest zarówno dzień miesiąca, jak i dzień tygodnia, wystarczy, że pasuje jedno z nich. Dlatego 0 0 13 * 5 uruchamia się 13. dnia każdego miesiąca i w każdy piątek, a nie tylko w piątek trzynastego. Ta reguła pochodzi z Vixie cron i obowiązuje w większości systemów Linux. Jeśli któreś z tych pól zaczyna się od *, nawet z krokiem takim jak */2, muszą pasować oba.

Makra @hourly, @daily, @weekly, @monthly i @yearly (lub @annually) to skróty popularnych harmonogramów, a @reboot uruchamia zadanie raz, gdy startuje cron. Szóste pole na sekundy na początku, ? jako „dowolny dzień” i L jako ostatni dzień miesiąca pochodzą z Quartz, Spring i podobnych harmonogramów zadań; zwykły crontab ich nie rozumie.

Cron działa według czasu lokalnego komputera. Gdy zaczyna się czas letni i zegar przeskakuje z 2:00 na 3:00, zadanie o stałej godzinie w pominiętej godzinie uruchamia się zaraz po zmianie czasu, a gdy zegar jest cofany, uruchamia się tylko raz. Zadania z * w polu minut lub godzin idą natomiast za nowym zegarem. Lista tutaj działa tak samo, w twojej strefie czasowej lub w UTC.

Sprawdź, która implementacja wykonuje twój harmonogram. Usługi chmurowe często mają własne warianty: AWS EventBridge ma na przykład sześć pól z rokiem na końcu i wymaga ? w dniu miesiąca albo w dniu tygodnia, a wiele usług działa w UTC zamiast w czasie lokalnym.

W drugą stronę możesz opisać harmonogram słowami: „w każdy poniedziałek o 9”, „co 15 minut”, „pierwszego dnia miesiąca o 2:30”, „w dni robocze od 9 do 17” albo „ostatniego dnia miesiąca o północy”. Godziny są odczytywane jako 9, 9.30, 9:30 i 09h30, zakresy jako 9–17, a listy jako 1, 15. Nazwy dni tygodnia i miesięcy są rozpoznawane w formie podstawowej, na przykład „piątek” i „styczeń”. Gdy opis zostanie zrozumiany, wyrażenie pojawia się od razu, a objaśnienie powyżej mówi słowami, co ono oznacza, więc widać, czy wyszło to, o co chodziło. Gdy nie zostanie zrozumiany, pojawiają się słowa, których nie udało się odczytać, zamiast zgadywania.

Kreator pod polem tekstowym robi to samo za pomocą kontrolek zamiast słów, a oba sposoby są ze sobą zsynchronizowane: opis wypełnia kontrolki, a każda zmiana w kontrolkach zmienia wyrażenie. Nie każdy harmonogram da się zapisać jako wyrażenie cron. W zwykłym crontab nie da się powiedzieć „pierwszy poniedziałek miesiąca” ani „co drugi tydzień”, a dwie różne godziny w jednym opisie (o 9 i o 17) zapisuje się jako listę w polu godzin: 0 9,17 * * *.

Źródła

Jak sprawdzamy narzędzia