Generator wyrażeń Cron

0-59

0-23

1-31

1-12

0.7 sun

Dalej

Składnia cron jest zwięzła i łatwo o pomyłkę: 0 */6 * * * uruchamia się co sześć godzin, natomiast */6 0 * * * odpala dziesięć razy, tylko w pierwszej godzinie po północy. Ten generator pozwala wizualnie wybrać harmonogram (co 15 minut, w dni robocze o 9:00, 1. dnia każdego miesiąca) i generuje dokładne wyrażenie wraz z opisem w przystępnym języku, co ono oznacza.

Jak stworzyć wyrażenie Cron

  1. 1

    Wybierz szablon lub wpisz pola

    Co minutę, co godzinę, codziennie o północy, w każdą niedzielę i 1. dnia każdego miesiąca to jeden klik. We wszystkich innych przypadkach wpisz wartości bezpośrednio w pięć pól.

  2. 2

    Dopracuj harmonogram

    Konkretne minuty, godziny, dni miesiąca, miesiące oraz dni tygodnia. Obsługiwane są zakresy (9-17), listy (1,15) oraz kroki (*/6).

  3. 3

    Odczytaj wyrażenie

    Generator zawsze zwraca standardowy format cron z 5 polami oraz opis harmonogramu w przystępnym języku.

  4. 4

    Sprawdź dialekt

    Dialekty różnią się (Quartz, AWS EventBridge, Kubernetes). Upewnij się, że wyrażenie odpowiada temu, czego oczekuje twój scheduler.

Pięć pól

*  *  *  *  *
│  │  │  │  │
│  │  │  │  └── Dzień tygodnia (0-6, niedziela=0, lub SUN-SAT)
│  │  │  └───── Miesiąc (1-12, lub JAN-DEC)
│  │  └──────── Dzień miesiąca (1-31)
│  └─────────── Godzina (0-23)
└────────────── Minuta (0-59)

Każde pole akceptuje:

  • Konkretną liczbę: 5
  • Listę: 1,15,30
  • Zakres: 9-17
  • Krok: */10 (co 10) lub 0-30/5 (co 5 od 0 do 30)
  • Symbol wieloznaczny: * (każda wartość)

Najczęściej używane wyrażenia

Harmonogram Wyrażenie Cron
Co minutę * * * * *
Co 15 minut */15 * * * *
O każdej pełnej godzinie 0 * * * *
Co 6 godzin 0 */6 * * *
Codziennie o 2:30 30 2 * * *
W każdy dzień roboczy o 9:00 0 9 * * 1-5
W każdy poniedziałek o 8:00 0 8 * * 1
1. dnia każdego miesiąca o 3:00 0 3 1 * *
Co 15 minut, w dni robocze od 9 do 17 */15 9-17 * * 1-5
W południe 1. i 15. dnia 0 12 1,15 * *
W każdą niedzielę o północy 0 0 * * 0

Pułapka dnia miesiąca + dnia tygodnia

W standardowym cronie, jeśli określono zarówno dzień miesiąca, jak i dzień tygodnia (oba różne od *), zadanie uruchamia się, gdy pasuje którykolwiek z nich (logika OR, a nie AND). 0 0 1 * MON uruchamia się 1. dnia każdego miesiąca oraz w każdy poniedziałek, a nie tylko wtedy, gdy 1. dzień miesiąca wypada w poniedziałek.

Vixie cron oraz większość dystrybucji Linuksa stosuje tę regułę OR. Quartz (Java) i niektóre inne używają AND. W razie wątpliwości przetestuj wyrażenie za pomocą suchego uruchomienia (dry run) lub zadania testowego w swoim schedulerze.

Różnice między dialektami

  • Standardowy cron (Linux): 5 pól, dzień tygodnia 0-6 (niedziela = 0 lub 7).
  • Quartz (Spring, aplikacje Java): 6-7 pól, gdzie pierwsze pole to sekundy, a rok jest opcjonalny. Dzień tygodnia 1-7 (niedziela = 1).
  • AWS EventBridge cron: 6 pól, w tym rok. Dzień tygodnia i dzień miesiąca muszą się wzajemnie wykluczać (jedno z nich musi być ?).
  • GitHub Actions: standardowe 5 pól, minimalny interwał 5 minut, tylko UTC.
  • Kubernetes CronJob: standardowe 5 pól, domyślnie UTC.

Zawsze sprawdzaj, którego dialektu używa Twój harmonogramator.

Strefy czasowe

Klasyczny cron działa w lokalnej strefie czasowej serwera. To powoduje poważne problemy podczas zmiany czasu letniego (DST): zadanie zaplanowane na 2:30 w dniu zmiany czasu może zostać wykonane dwukrotnie albo wcale. Nowoczesne harmonogramatory (systemd timers, Kubernetes, EventBridge) pozwalają jawnie określić strefę czasową – używaj UTC, chyba że masz dobry powód, by tego nie robić.

Najczęściej zadawane pytania

Co 5 jednostek danego pola, zaczynając od 0. W polu minut */5 uruchamia się w minutach 0, 5, 10, 15, …, 55. To skrócony zapis dla 0,5,10,15,20,25,30,35,40,45,50,55.

Cron nie potrafi wyrazić dowolnych interwałów, które nie dzielą się równo przez 60 minut lub 24 godziny. Dla 90 minut wypisz konkretne czasy uruchomienia: połącz 0 0,9 * * * z dodatkowymi wierszami albo przejdź na harmonogramator obsługujący dowolne interwały (systemd timers, anacron).

O północy. Kolejność pól to minuta-godzina, więc 0 0 oznacza „minuta 0 godziny 0“. Południe to 0 12 * * *.

Standardowy cron pomija to zadanie – pominięte uruchomienia nie są ponawiane. Anacron przy następnym uruchomieniu systemu wykonuje pominięte zadania dzienne, tygodniowe lub miesięczne. Zadania CronJob w Kubernetes mają startingDeadlineSeconds i concurrencyPolicy, które pozwalają jawnie obsłużyć pominięte okna czasowe.

Powiązane narzędzia