Kreator i tłumacz wyrażeń cron

Zbuduj wyrażenie cron albo odczytaj istniejące w zrozumiałym języku.

O tym narzędziu

Wybierz, jak często zadanie ma się uruchamiać, aby zbudować wyrażenie cron, albo wpisz istniejące, aby otrzymać opis w zrozumiałym języku, rozbicie na pola i najbliższe terminy uruchomienia w Twojej strefie czasowej. Obsługuje zakresy, listy, kroki, nazwy miesięcy i dni oraz skróty, takie jak @daily.

Jak z tego korzystać

  1. Aby odczytać wyrażenie, wklej je w trybie Objaśnij i zobacz jego opis w zrozumiałym języku.
  2. Aby je utworzyć, przełącz się na tryb Zbuduj i wybierz, jak często zadanie ma się uruchamiać.
  3. Sprawdź najbliższe uruchomienia, pokazane w Twojej strefie czasowej.
  4. Skopiuj wyrażenie do crontaba, konfiguracji CI lub harmonogramu zadań.

Pytania

Co oznacza pięć pól?
Po kolei: minuta (0–59), godzina (0–23), dzień miesiąca (1–31), miesiąc (1–12) i dzień tygodnia (0–6, niedziela to 0 lub 7). * oznacza każdą wartość.
Jak uruchamiać zadanie co 5 minut?
Użyj */5 * * * *. /5 to krok, czyli co piąta wartość danego pola, zaczynając od 0.
Co, jeśli ustawię zarówno dzień miesiąca, jak i dzień tygodnia?
W klasycznym cronie zadanie uruchamia się, gdy pasuje którekolwiek z nich, a nie oba. Dlatego 0 9 1 * MON uruchamia się o 9:00 pierwszego dnia każdego miesiąca oraz w każdy poniedziałek.
Jakiej strefy czasowej używa cron?
Strefa czasowa maszyny lub usługi, która je uruchamia – na serwerach i w CI to często UTC. Najbliższe uruchomienia są tu pokazywane w Twoim czasie lokalnym, więc przelicz je, jeśli Twój serwer używa UTC.
Jak uruchomić zadanie cron co 30 sekund?
Cron tego nie potrafi: jego najmniejszą jednostką jest jedna minuta. Popularne obejście to dwa wpisy: jeden uruchamia polecenie, a drugi sleep 30, a po nim polecenie. Do wszystkiego, co ma być precyzyjniejsze lub częstsze, użyj timera systemd albo długo działającego procesu z własną pętlą.
Jak uruchomić zadanie w ostatni dzień miesiąca?
Standardowy cron nie zna L. Zaplanuj zadanie na dni 28-31, np. 0 23 28-31 * *, i zacznij polecenie od sprawdzenia, czy jutro jest 1. dzień miesiąca, na przykład [ $(date -d tomorrow +\%d) = 01 ] && your-command, co wymaga GNU date.
Co oznacza @reboot w crontabie?
@reboot uruchamia polecenie raz, gdy startuje demon crona, zwykle zaraz po uruchomieniu maszyny. Obsługują go cronie i Vixie cron, ale nie jest to harmonogram czasowy, więc to narzędzie nie może pokazać dla niego następnych uruchomień i zgłasza błąd. Na maszynach z systemd lepszym wyborem jest często jednostka usługi (service unit).

Dlaczego moje zadanie cron się nie uruchamia?

Najpierw sprawdź, czy cron w ogóle widzi zadanie. Uruchom crontab -l jako ten sam użytkownik i upewnij się, że plik kończy się znakiem nowej linii, bo niektóre wersje crona ignorują ostatnią linię bez niego. Potem sprawdź harmonogram: wklej go tutaj i przeczytaj następne uruchomienia. Częstą niespodzianką jest */45 w polu minut, które uruchamia zadanie o :00 i :45 każdej godziny, a nie co 45 minut.

Jeśli harmonogram jest poprawny, winne jest zwykle środowisko. Cron uruchamia zadania z minimalnym PATH i bez profilu powłoki, więc polecenia działające w Twoim terminalu kończą się błędem „command not found”. Używaj ścieżek bezwzględnych, ustaw PATH na początku crontaba i kieruj wyjście do logu przez >> /tmp/job.log 2>&1, aby widzieć błędy. Pamiętaj też, że % ma w liniach crontaba specjalne znaczenie i trzeba go escapować jako \%.

Składnia crona: zakresy, listy, kroki i skróty

Każde pole przyjmuje więcej niż pojedynczą liczbę. Zakres, np. 9-17, pasuje do każdej wartości od 9 do 17, lista, np. 1,15, pasuje do każdej wymienionej wartości, a krok, np. */15, pasuje do co piętnastej wartości, zaczynając od minimum pola. Można je łączyć: 0-30/10 w polu minut oznacza 0, 10, 20 i 30. Pola miesiąca i dnia tygodnia przyjmują też nazwy, takie jak JAN czy MON-FRI.

Skróty zastępują całe wyrażenie: @hourly to 0 * * * *, @daily i @midnight to 0 0 * * *, @weekly to 0 0 * * 0, @monthly to 0 0 1 * *, a @yearly lub @annually to 0 0 1 1 *. W polu dnia tygodnia zarówno 0, jak i 7 oznaczają niedzielę. Tabela Pola w tym tłumaczu wyrażeń cron pokazuje, do jakich wartości rozwija się każde pole – to najszybszy sposób na sprawdzenie podchwytliwej kombinacji.

Crontab a cron w Kubernetes, GitHub Actions i Quartz

Format pięciopolowy jest wspólny dla linuksowego crontaba, CronJobów w Kubernetes i harmonogramów GitHub Actions, więc wyrażenie zbudowane w tym generatorze crona działa we wszystkich trzech. GitHub Actions zawsze używa UTC, uruchamia zadania najwyżej co 5 minut i przy dużym obciążeniu może startować zaplanowane zadania z opóźnieniem. Kubernetes używa strefy czasowej kontrolera, chyba że ustawisz spec.timeZone. Żaden z nich nie obsługuje pola sekund.

Quartz, Spring i AWS EventBridge używają dłuższych formatów. Quartz i Spring dodają pole sekund na początku, a AWS pole roku na końcu. Quartz i AWS wymagają też ? w jednym z dwóch pól dnia, a wszystkie trzy obsługują dodatki, takie jak L dla ostatniego dnia i # dla n-tego dnia tygodnia. Takie wyrażenia są tu odrzucane, więc usuń dodatkowe pola i przepisz L lub # ręcznie.

Najczęstsze wyrażenia cron

Skopiuj jeden z tych harmonogramów albo wklej go do narzędzia powyżej, aby zobaczyć najbliższe uruchomienia.

WyrażenieZnaczenie
* * * * *Co minutę
*/5 * * * *Co 5 minut
*/15 * * * *Co 15 minut
0 * * * *Co godzinę
0 */6 * * *O pełnej godzinie, co 6 godzin
0 0 * * *O 00:00
30 2 * * *O 02:30
0 9 * * 1-5O 09:00, od poniedziałek do piątek
0 0 * * 0O 00:00, tylko niedziela
0 0 1 * *O 00:00, 1-ego dnia miesiąca
0 0 1 1 *O 00:00, 1-ego dnia miesiąca, tylko styczeń

Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem