Menu

Generator wyrażeń cron

Twórz, rozszyfrowuj i podglądaj harmonogramy cron z najbliższymi terminami uruchomień.

Autor: Nethanel Bar, Co-founder & CEO

Ostatnia aktualizacja

Chcesz naprawdę nauczyć się programować?

Coddy uczy cię przez pisanie prawdziwego kodu w przeglądarce: interaktywne lekcje, natychmiastowa informacja zwrotna i pomoc AI, gdy utkniesz.

Czym jest wyrażenie cron?

Wyrażenie cron to zwięzły sposób opisania cyklicznego harmonogramu. To ta sama składnia, której używa uniksowy cron, oryginalny harmonogram zadań w Linuksie, i trafiła ona do prawie każdego systemu zadań, jaki spotkasz: Kubernetes CronJobs, harmonogramów GitHub Actions, AWS EventBridge, Cloudflare Workers, Vercel cron i większości platform CI/CD.

Format wygląda groźnie, ale to tylko pięć pól oddzielonych spacjami: minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia. Każde pole to liczba, lista (1,15), zakres (9-17), krok (*/5) lub symbol wieloznaczny (*). Dobre narzędzie do crona zamienia wyrażenie na zwykłe zdanie i pokazuje kolejne terminy uruchomień, żeby można było je sprawdzić przed wdrożeniem.

Niektóre platformy rozszerzają podstawową składnię 5 pól o pole *sekund* na początku (Quartz, Spring, 6-polowy Kubernetes) lub pole *roku* na końcu. Zawsze sprawdź, jaki format akceptuje twój harmonogram, zanim wkleisz wyrażenie.

Czego nauczysz się, tworząc harmonogramy cron

  • Standardowe wyrażenie cron ma 5 pól: minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia.
  • * oznacza "każdą wartość" w danym polu i to najczęstszy powód, dla którego harmonogram uruchamia się częściej, niż się spodziewano.
  • */N oznacza "co N jednostek": */5 w polu minut to "co 5 minut".
  • Dzień miesiąca i dzień tygodnia wpływają na siebie nawzajem: ustawienie obu zawęża harmonogram, ale w klasycznym uniksowym cronie ustawienie jednego z nich na *, a drugiego na konkretną wartość to bezpieczniejszy sposób zapisu reguł tylko dla dni tygodnia lub tylko miesięcznych.

Jak krok po kroku napisać wyrażenie cron

  1. Zacznij od gotowego ustawienia

    Wybierz ustawienie bliskie temu, czego potrzebujesz: Co minutę, Co godzinę, Codziennie o 9:00, W dni robocze o 9:00, Co miesiąc. Wyrażenie pojawi się w edytorze.

  2. Dostosuj każde pole

    Edytuj minutę, godzinę, dzień miesiąca, miesiąc i dzień tygodnia. Używaj * dla dowolnej wartości, list z przecinkami, zakresów (9-17) lub kroków (*/15).

  3. Przeczytaj opis w zwykłym języku

    Narzędzie zamienia wyrażenie na zdanie (O 09:00 w dni robocze). Jeśli zdanie nie odpowiada temu, czego chcesz, wyrażenie jest błędne.

  4. Podejrzyj kolejne uruchomienia

    Sprawdź od 5 do 10 najbliższych terminów w swojej lokalnej strefie czasowej. Uważaj na zmiany czasu letniego, jeśli harmonogram wypada blisko przestawienia zegarów.

  5. Skopiuj do harmonogramu

    Wklej wyrażenie do crontab, workflow GitHub Actions, Kubernetes CronJob lub dowolnego harmonogramu, którego używasz.

Pola crona: ściąga

Pięć pól standardowego wyrażenia cron, po kolei. Źródło: strona podręcznika POSIX crontab(5).

PozycjaPoleZakresZnaki specjalne
1Minuta0-59* , - /
2Godzina0-23* , - /
3Dzień miesiąca1-31* , - / ? (niektóre dialekty)
4Miesiąc1-12 lub od JAN do DEC* , - /
5Dzień tygodnia0-6 (nd=0) lub od SUN do SAT* , - /

Przykłady wyrażeń cron do wypróbowania

Co 5 minut

Wyrażenie

*/5 * * * *

Znaczy

Co 5 minut: o pełnej godzinie i co 5 minut później.

Wartości krokowe (*/5) to najprostszy sposób zapisu "co N" bez wypisywania każdej liczby. Często używane przy health checkach i zadaniach odpytujących.

W dni robocze o 9:00

Wyrażenie

0 9 * * 1-5

Znaczy

O 09:00 od poniedziałku do piątku.

Zakres dni tygodnia 1-5 oznacza od poniedziałku do piątku. Używaj go do przypomnień w godzinach pracy i podsumowań tylko w dni robocze.

Pierwszy dzień każdego miesiąca o północy

Wyrażenie

0 0 1 * *

Znaczy

O 00:00 pierwszego dnia każdego miesiąca.

Dzień miesiąca 1 i * we wszystkich pozostałych polach dają prawdziwe zadanie miesięczne. Często używane przy rozliczeniach, raportach i zadaniach rotacji.

Dwa razy na godzinę, w godzinach pracy, w dni robocze

Wyrażenie

0,30 9-17 * * 1-5

Znaczy

W minucie 0 i 30 między 09:00 a 17:00, od poniedziałku do piątku.

Lista z przecinkiem (0,30), zakres (9-17) i dni robocze. Taki harmonogram przydaje się przy odświeżaniu raportów BI lub opróżnianiu kolejki, które mają znaczenie tylko w godzinach pracy.

Częste błędy przy cronie

  • Zapominanie o strefie czasowej. Większość demonów cron działa w strefie czasowej *serwera*, a nie twojej. Ustaw strefę czasową jawnie, jeśli platforma na to pozwala.
  • Ustawianie jednocześnie dnia miesiąca i dnia tygodnia. W klasycznym uniksowym cronie harmonogram uruchamia się w dniu pasującym do *dowolnego* z nich, co za pierwszym razem zaskakuje większość osób.
  • Używanie */45 w oczekiwaniu, że zadanie będzie uruchamiane co 45 minut. Wartości krokowe liczone są od 0, więc */45 uruchamia się w minucie 0 i 45, a nie w prawdziwym 45-minutowym odstępie.
  • Brak podglądu kolejnych uruchomień przed wdrożeniem. Wyrażenie cron, które jest prawie dobre, może uruchamiać się 60 razy częściej, niż zamierzano.
  • Zapominanie o zmianie czasu. Harmonogram 0 2 * * * może uruchomić się dwa razy w dniu cofnięcia zegarów i ani razu, gdy zegary przesuwają się do przodu.

Wyrażenia cron: FAQ

Jak napisać wyrażenie cron?
Standardowe wyrażenie cron ma pięć pól oddzielonych spacjami: minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia. Użyj * dla *każdej wartości*, liczby dla dokładnej wartości, listy z przecinkami (1,15), zakresu (9-17) lub kroku (*/5).
Co oznacza */5 * * * *?
Oznacza "co 5 minut". */5 w polu minut uruchamia zadanie w minucie 0 i co 5 minut później: 0, 5, 10, 15, …, 55, a * w pozostałych polach oznacza, że działa co godzinę, każdego dnia, w każdym miesiącu i w każdy dzień tygodnia.
Jakiej strefy czasowej używa cron?
Domyślnie cron używa strefy czasowej systemu, na którym działa. Większość chmurowych harmonogramów pozwala ustawić strefę jawnie (TZ=Europe/Berlin, wyrażenia harmonogramu AWS itd.). W razie wątpliwości zapisuj harmonogramy w UTC.
Czy wyrażenie cron może działać co sekundę?
Najmniejszą jednostką standardowego 5-polowego crona jest minuta, więc największa rozdzielczość to co minutę. Quartz cron, Spring cron i niektóre wersje Kubernetesa dodają szóste pole *sekund* dla harmonogramów częstszych niż co minutę.
Czym różni się 0 0 * * 0 od 0 0 * * 7?
Oba opisują niedzielę o północy. W większości implementacji crona dzień tygodnia to 0 do 6 (od niedzieli do soboty), ale 7 również jest akceptowane jako niedziela dla zgodności z niektórymi dialektami.

Dowiedz się więcej

Inne narzędzia dla programistów

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ