CodeKitHub
Narzędzia dla programistów

Generator Wyrażeń Cron

Ostatnia aktualizacja:

Wyrażenie cron to pięciopolowy ciąg znaków (minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia), który informuje harmonogram zadań, taki jak Unix cron, crontab czy pipeline CI/CD, kiedy dokładnie uruchomić zadanie — na przykład `*/15 9-17 * * MON-FRI` oznacza "co 15 minut, od 9:00 do 17:00, od poniedziałku do piątku". To narzędzie działa w obie strony: możesz zbudować harmonogram za pomocą prostych list rozwijanych i otrzymać string cron, albo wkleić istniejące wyrażenie cron i od razu zobaczyć jego tłumaczenie w prostym języku oraz kolejne 5 rzeczywistych godzin uruchomienia. Narzędzie stosuje standardową, 5-polową składnię POSIX/Vixie cron używaną przez Unix, crontab w Linuksie i większość harmonogramów zadań — pełną specyfikację znajdziesz na stronie podręcznika crontab(5). Wszystko działa lokalnie w Twojej przeglądarce; nic z tego, co wpiszesz, nie jest nigdzie przesyłane.

Opis
Następne 5 uruchomień
    Kreator
    Minuta
    Godzina
    Dzień miesiąca
    Miesiąc
    Dzień tygodnia
    Legenda składni
    • * — any value
    • , — value list separator (e.g. 1,3,5)
    • - — range of values (e.g. 1-5)
    • / — step values (e.g. */15 = every 15)

    Czym jest to narzędzie?

    Wyrażenie cron to zwięzły, pięciopolowy string harmonogramu — `minuta godzina dzień-miesiąca miesiąc dzień-tygodnia` — używany przez demona `cron` w Uniksie oraz praktycznie każdy harmonogram zadań wzorowany na nim (crontab, CronJob w Kubernetesie, `schedule:` w GitHub Actions, Airflow, Jenkins). Każde pole akceptuje gwiazdkę (`*`, oznaczającą "dowolną wartość"), konkretną liczbę, listę oddzieloną przecinkami (`1,15,30`), zakres (`9-17`), krok (`*/15`, oznaczający "co 15 jednostek") lub — w przypadku miesiąca i dnia tygodnia — trzyliterową nazwę (`JAN`, `MON`) zamiast liczby.

    Kanoniczną definicję tej składni zawiera strona podręcznika crontab(5) w Linuksie, która dokumentuje dokładnie te same pięć pól, znaki specjalne (`* , - /`) oraz osiem skrótowych ciągów `@` (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`), które większość implementacji cron, w tym Vixie cron (wersja dostarczana w większości dystrybucji Linuksa), obsługuje jako aliasy popularnych harmonogramów.

    To narzędzie implementuje dokładnie ten standardowy format 5-polowy — format, który wpisałbyś bezpośrednio w `crontab -e` na serwerze z Linuksem lub macOS, albo w polu `schedule:` obiektu CronJob w Kubernetesie. Nie obsługuje składni Quartz cron, czyli innego, 6- lub 7-polowego formatu używanego przez Quartz Scheduler w Javie oraz niektóre narzędzia dostawców (zobacz sekcję porównawczą poniżej, aby dowiedzieć się, kiedy jest on potrzebny).

    Dlaczego warto go używać?

    • Właśnie odziedziczyłeś produkcyjny crontab z linijką typu `17 3 * * 0` bez żadnego komentarza wyjaśniającego — wklej ją tutaj, zanim czegokolwiek dotkniesz, żeby zobaczyć, że to naprawdę "w każdą niedzielę o 3:17", a nie literówka.
    • Piszesz workflow GitHub Actions z triggerem cron `schedule:` i wciąż się zastanawiasz, czy `0 */6 * * *` naprawdę oznacza co 6 godzin od północy — sprawdź kolejne 5 godzin uruchomienia, zanim zacommitujesz YAML.
    • Skonfigurowałeś zadanie cron z ograniczeniem zarówno na dzień miesiąca, jak i dzień tygodnia, np. `0 4 8 * MON`, a zadanie uruchamia się w dniach, których się nie spodziewałeś — to narzędzie ujawnia zachowanie sumy OR-a-nie-AND, które zaskakuje niemal każdego za pierwszym razem.
    • Budujesz CronJob w Kubernetesie i potrzebujesz dokładnego stringa `schedule:` dla "co 15 minut, tylko godziny pracy, dni robocze" bez ręcznego liczenia pól — użyj kreatora z listami rozwijanymi zamiast pisać go ręcznie.
    • Nie masz pewności, czy konfiguracja harmonogramu używa standardowego crona czy Quartz cron, bo dokumentacja mówi tylko "wyrażenie cron" — sprawdź, czy ma 5 pól (to narzędzie) czy 6-7 pól ze znakami `?`/`L`/`W`/`#` (Quartz), zanim stracisz czas na debugowanie niezgodności formatu.
    • 100% po stronie klienta: logika Twojego harmonogramu nigdy nie opuszcza przeglądarki.

    Jak używać

    1. Aby przetłumaczyć wyrażenie: wpisz lub wklej 5-polowy string cron (albo skrót @, np. `@daily`) w polu wprowadzania.
    2. Odczytaj opis w prostym języku oraz kolejne 5 obliczonych godzin uruchomienia poniżej — oba aktualizują się na bieżąco podczas pisania.
    3. Aby zamiast tego zbudować wyrażenie: otwórz sekcję Kreator, wybierz tryb (co / co N / konkretna wartość) dla każdego z pięciu pól i kliknij "Generuj wyrażenie".
    4. Wygenerowane wyrażenie pojawia się w polu wprowadzania powyżej i natychmiast zasila panele opisu oraz kolejnych godzin uruchomienia.
    5. Skorzystaj z legendy składni na dole strony jako szybkiego odniesienia dla `*`, `,`, `-` i `/`.
    6. Skopiuj ostateczne wyrażenie przyciskiem Kopiuj i wklej je do swojego crontaba, konfiguracji CI lub harmonogramu.

    Przykład

    Wejście

    */15 9-17 * * MON-FRI

    Wynik

    O 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, w poniedziałek, wtorek, środę, czwartek, piątek

    To wyrażenie uruchamia się co 15 minut, ale tylko w przedziale godzinowym 09:00–17:59 i tylko w dni robocze — typowy harmonogram odpytywania w "godzinach pracy".

    Standardowy cron a Quartz cron

    "Składnia cron" nie jest jednym uniwersalnym standardem — dwa formaty, z którymi spotkasz się najczęściej, różnią się liczbą pól oraz znaczeniem kilku znaków specjalnych. Użyj tej tabeli, aby upewnić się, że stosujesz właściwy format dla docelowego harmonogramu.

    AspektStandardowy cron (to narzędzie)Quartz cron
    Liczba pól5 (minuta godzina dom miesiąc dow)6 lub 7 (dodaje sekundy oraz opcjonalny rok)
    Stosowany przezcrontab w Linuksie/macOS, CronJob w Kubernetesie, GitHub ActionsQuartz Scheduler w Javie, niektóre harmonogramy klasy enterprise
    Ustawione zarówno dzień miesiąca, jak i dzień tygodniaPasuje do KTÓREGOKOLWIEK (suma/OR)Wymaga `?` w jednym z dwóch pól — nie można ustawić obu wartości jednocześnie
    Dodatkowe znaki specjalneBrak poza `* , - /`Dodaje `?`, `L` (ostatni), `W` (najbliższy dzień roboczy), `#` (n-ty dzień tygodnia w miesiącu)
    Harmonogramowanie na poziomie sekundNieobsługiwaneObsługiwane (pierwsze pole)

    Powiązane narzędzia

    Pracujesz z konfiguracjami, harmonogramami lub znacznikami czasu? Te narzędzia dobrze uzupełniają generator cron.

    Konwerter Znaczników Czasu · Konwerter Zegara Światowego · Kalkulator Dat

    Popularne przepisy na harmonogramy

    Garstka wyrażeń pokrywa większość realnych potrzeb związanych z harmonogramami — warto rozpoznawać je od razu, zamiast wyprowadzać za każdym razem od nowa.

    • `*/5 * * * *` — co 5 minut, cały dzień. Popularne w przypadku health checków i lekkich zadań odpytujących.
    • `0 */6 * * *` — co 6 godzin, punktualnie (00:00, 06:00, 12:00, 18:00). Częsty domyślny wybór dla okresowej synchronizacji lub sprzątania.
    • `0 2 * * *` — raz dziennie o 2 w nocy. Klasyczny slot na nocne kopie zapasowe, gdy ruch jest najmniejszy.
    • `0 9 * * 1-5` — o 9:00, tylko od poniedziałku do piątku. Standard dla raportów lub podsumowań ograniczonych do godzin pracy.
    • `0 0 1 * *` — północ 1. dnia każdego miesiąca, odpowiednik skrótu `@monthly`. Używane do miesięcznych rozliczeń lub resetów limitów.
    • `*/15 9-17 * * MON-FRI` — co 15 minut, ale tylko w godzinach pracy w dni robocze — łączy krok, zakres godzin i zakres dni tygodnia w jednym wyrażeniu.

    Najczęściej zadawane pytania

    Czym jest wyrażenie cron?

    Wyrażenie cron to 5-polowy ciąg tekstowy (`minuta godzina dzień-miesiąca miesiąc dzień-tygodnia`), który określa powtarzalny harmonogram dla demona `cron` w Uniksie i kompatybilnych harmonogramów zadań. Każde pole może mieć wartość `*` (dowolna wartość), liczbę, listę oddzieloną przecinkami, zakres (`a-b`) lub krok (`*/n`); pola miesiąca i dnia tygodnia akceptują też trzyliterowe nazwy, takie jak `JAN` czy `MON`. Pełna specyfikacja jest udokumentowana na stronie podręcznika crontab(5).

    Co się dzieje, gdy zarówno dzień miesiąca, jak i dzień tygodnia są ograniczone?

    To dobrze znana pułapka cron: zgodnie z semantyką POSIX cron, gdy OBA pola — dzień miesiąca i dzień tygodnia — są ograniczone (nie są `*`), zadanie uruchamia się, jeśli spełniony jest KTÓRYKOLWIEK z warunków — to suma (OR), a nie iloczyn (AND). Na przykład `0 4 8 * MON` uruchamia się o 4:00 zarówno 8. dnia każdego miesiąca, JAK I w każdy poniedziałek, a nie tylko w poniedziałki wypadające 8. dnia miesiąca. To narzędzie implementuje dokładnie takie zachowanie sumy przy obliczaniu kolejnych godzin uruchomienia.

    Standardowy cron czy Quartz cron — którego potrzebuję?

    To narzędzie generuje standardową, 5-polową składnię POSIX/Vixie cron — format używany przez `crontab` w Linuksie/macOS, CronJob w Kubernetesie, `schedule:` w GitHub Actions oraz większość narzędzi uruchamiających zadania wywodzących się z Uniksa. Quartz cron, używany przez Quartz Scheduler w Javie i narzędzia na nim oparte (niektóre harmonogramy klasy enterprise, starsze konfiguracje Spring Batch), to inny, 6- lub 7-polowy format, który dodaje wiodące pole sekund i zmienia znaczenie niektórych znaków specjalnych (`?` oznacza "brak konkretnej wartości" w polach dnia, `L`/`W`/`#` oznaczają odpowiednio "ostatni dzień", "najbliższy dzień roboczy" i "n-ty dzień tygodnia w miesiącu"). Jeśli liczba pól w Twoim harmonogramie wynosi 6 lub 7, albo dokumentacja wspomina o `?`, `L`, `W` lub `#`, potrzebujesz narzędzia dedykowanego dla Quartz — wyrażenia z tego generatora nie zostaną tam poprawnie zinterpretowane. Jeśli masz dokładnie 5 pól (lub skrót w stylu `@daily`), jesteś we właściwym miejscu.

    Co oznaczają skróty @yearly, @monthly, @weekly, @daily i @hourly?

    To niestandardowe, ale szeroko wspierane skrótowe ciągi, które rozwijają się do popularnych wyrażeń 5-polowych: `@yearly`/`@annually` = `0 0 1 1 *` (raz w roku, 1 stycznia o północy), `@monthly` = `0 0 1 * *` (1. dnia każdego miesiąca o północy), `@weekly` = `0 0 * * 0` (w każdą niedzielę o północy), `@daily`/`@midnight` = `0 0 * * *` (codziennie o północy), `@hourly` = `0 * * * *` (na początku każdej godziny). To narzędzie parsuje je wszystkie i traktuje dokładnie jak ich rozwinięty odpowiednik 5-polowy.

    Czy mogę używać nazw dni/miesięcy zamiast liczb?

    Tak. Pole miesiąca akceptuje trzyliterowe nazwy od `JAN` do `DEC`, a pole dnia tygodnia akceptuje od `SUN` do `SAT` (bez rozróżniania wielkości liter), zamiennie z liczbami. Liczby dni tygodnia wynoszą od 0 do 6, gdzie 0 oznacza niedzielę; niektóre implementacje akceptują też 7 jako niedzielę, co to narzędzie normalizuje do 0. Zakresy i listy również działają z nazwami, np. `MON-FRI` czy `JAN,JUN,DEC`.

    Czy moje wyrażenie cron jest wysyłane na serwer?

    Nie. Parsowanie, opis w prostym języku oraz obliczanie kolejnych godzin uruchomienia odbywają się lokalnie w JavaScripcie, w Twojej przeglądarce. Nic z tego, co wpiszesz lub wygenerujesz, nigdy nie opuszcza Twojego urządzenia.

    W jakiej strefie czasowej obliczane są kolejne godziny uruchomienia?

    To narzędzie oblicza kolejne godziny uruchomienia w oparciu o lokalną strefę czasową Twojej przeglądarki, ponieważ standardowy cron sam w sobie nie ma wbudowanego pola strefy czasowej — faktyczny demon lub harmonogram uruchamiający Twoje zadanie używa strefy czasowej ustawionej na systemie hosta (albo, w przypadku GitHub Actions i podobnych harmonogramów w chmurze, UTC). Jeśli strefa czasowa Twojego serwera różni się od strefy przeglądarki, w myślach przesuń wyświetlane godziny albo osobno sprawdź konfigurację strefy czasowej harmonogramu.

    Jak zaplanować zadanie tak, żeby uruchamiało się tylko w ostatnim dniu miesiąca?

    Standardowy, 5-polowy cron nie ma bezpośredniej składni "ostatni dzień miesiąca" — to jedna z funkcji, które Quartz cron dodaje za pomocą znaku `L`. W standardowym cronie popularnym obejściem jest zaplanowanie zadania na dni 28-31 każdego miesiąca (`0 0 28-31 * *`) i sprawienie, by sam skrypt sprawdzał, czy jutrzejsza data przechodzi na nowy miesiąc, zanim faktycznie wykona swoją logikę.

    Czy mogę zaplanować coś w nietypowym interwale, np. co 10 minut?

    Tak, za pomocą składni kroku: `*/10 * * * *` uruchamia się co 10 minut, zaczynając od :00 (czyli o :00, :10, :20, :30, :40, :50). Pamiętaj, że kroki zawsze liczą od minimalnej wartości danego pola, więc `*/10` w polu minut nigdy nie trafi na :05 ani :15 — jeśli potrzebujesz takiego przesunięcia, użyj zamiast tego jawnej listy oddzielonej przecinkami, np. `5,15,25,35,45,55`.

    Dlaczego moje zadanie cron zdaje się uruchamiać dwa razy naraz albo wcale, w okolicach zmiany czasu letniego?

    Standardowy cron planuje względem czasu zegarowego na systemie hosta, a przejścia czasu letniego tworzą albo pominiętą godzinę (przejście na czas letni), albo powtórzoną godzinę (powrót do czasu zimowego). Zadanie zaplanowane na pominiętą lub powtórzoną godzinę może uruchomić się tego dnia zero lub dwa razy, w zależności od tego, jak konkretny demon cron obsługuje tę sytuację. Uruchamianie krytycznych zadań infrastrukturalnych na serwerach ustawionych na UTC (który nie ma czasu letniego) całkowicie tego unika.

    Powiązane narzędzia