Wyjaśnij wyrażenie cron
Przeczytaj harmonogram crontab prostym językiem i wypisz najbliższe terminy jego uruchomienia w dowolnej strefie czasowej.
Działa w całości w Twojej przeglądarce
- Minuta
- Godzina
- Dzień miesiąca
- Miesiąc
- Dzień tygodnia
Następne uruchomienia
Standardowy cron z pięcioma polami (minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia), używany przez Vixie cron, cronie i większość systemów Linux, oraz skróty typu @daily. Formaty Quartz i inne z polem sekund są wykrywane, ale nie wyjaśniane.
Jak sprawdzić wyrażenie cron
- Wpisz lub wklej pięć pól harmonogramu, na przykład
*/15 9-17 * * 1-5, albo wybierz przykład. Działa też cały wiersz crontab; polecenie po piątym polu jest ignorowane. - Przeczytaj podsumowanie prostym językiem i rozbicie każdego pola. Błąd jest wskazywany w polu, w którym występuje.
- Sprawdź listę terminów następnych uruchomień. Wybierz strefę czasową, w której działa serwer, oraz inny czas początkowy, jeśli chcesz spojrzeć dalej w przód.
Jak czytać harmonogram cron
Cron sprawdza swoją tabelę raz na minutę i uruchamia każde zadanie, którego wszystkie pięć pól pasuje do bieżącego czasu, z jednym wyjątkiem dla dwóch pól dni opisanym poniżej. Zatem */15 9-17 * * 1-5 oznacza: w minutach 0, 15, 30 i 45, w godzinach od 9 do 17, w dowolny dzień miesiąca, w dowolnym miesiącu, od poniedziałku do piątku. Ostatnie uruchomienie danego dnia jest o 17:45, bo pole godziny obejmuje całą godzinę 17.
Narzędzie analizuje każde pole tak jak Vixie cron i cronie, które są dostarczane w większości dystrybucji Linuksa. Nazwy miesięcy i dni tygodnia są akceptowane w dowolnej wielkości liter, a 7 liczy się jako niedziela. Krok po pojedynczej liczbie, taki jak 5/10, jest odczytywany jako 5-59/10, tak jak robi to wiele wersji crona; niektóre starsze go odrzucają, dlatego narzędzie przypomina, aby zapisać zakres w pełni. Zakresy muszą biec od mniejszej wartości do większej: FRI-MON jest oznaczane jako błąd, a nie zawijane, bo standardowy cron nie zawija zakresów.
Terminy następnych uruchomień są wyliczane przez przechodzenie po kalendarzu w wybranej strefie czasowej, więc wyrażenie, które może pasować tylko 29 lutego, od razu znajduje następny rok przestępny, a takie, które nigdy nie może pasować, na przykład 0 0 31 2 *, jest zgłaszane jako nigdy nieuruchamiane.
Wskazówki
- Zamień czas uruchomienia z logu na znacznik czasu Unix lub z powrotem za pomocą narzędzia Konwerter znacznika czasu Unix.
- Testujesz wzorzec, którego zadanie używa do filtrowania logu? Wypróbuj Tester wyrażeń regularnych.
- Zobacz, jak wygląda konfiguracja JSON z harmonogramami, w narzędziu Formatuj i waliduj JSON.
Najczęstsze pytania
Co oznaczają pięć pól?
Po kolei: minuta (0–59), godzina (0–23), dzień miesiąca (1–31), miesiąc (1–12 lub JAN–DEC) i dzień tygodnia (0–7 lub SUN–SAT, gdzie 0 i 7 to niedziela). Każde pole przyjmuje pojedynczą wartość, listę, taką jak 1,15, zakres, taki jak 9-17, krok, taki jak */15 lub 0-30/10, albo * dla każdej wartości.
Dlaczego moje zadanie uruchamia się w więcej dni, niż oczekiwano?
Gdy ograniczone są jednocześnie pola dnia miesiąca i dnia tygodnia, cron uruchamia zadanie w dni pasujące do któregokolwiek z nich, a nie do obu. 0 9 1 * 1 uruchamia się pierwszego dnia każdego miesiąca i w każdy poniedziałek. Tak zachowują się Vixie cron i cronie. Osobliwość tej samej reguły: pole zaczynające się od *, na przykład */2, liczy się jako nieograniczone, więc wtedy oba pola muszą pasować.
Jakiej strefy czasowej używa cron?
Strefy czasowej maszyny lub kontenera, na którym działa, chyba że crontab ustawia CRON_TZ lub TZ. Wiele serwerów działa w UTC, więc sprawdź to, zanim zaufasz widzianym godzinom. Wybierz strefę serwera na liście, aby zobaczyć jego terminy uruchomień.
Co się dzieje przy zmianie czasu na letni lub zimowy?
Lista podąża za zegarem w wybranej strefie: godzina pomijana przy przestawieniu zegarów do przodu jest pomijana, a godzina występująca dwa razy przy cofnięciu jest wypisana raz. Vixie cron i cronie uruchamiają zadanie zaplanowane w pominiętej godzinie krótko po zmianie i nie powtarzają zadań w powtórzonej godzinie; inne harmonogramy zachowują się różnie. Gdy wypisany okres obejmuje zmianę czasu, pojawia się uwaga.
Czy obsługuje sekundy lub składnię Quartz?
Nie. Wyrażenia z sześcioma lub siedmioma polami albo ze znakami ?, L, W lub # pochodzą z Quartz, Spring i podobnych harmonogramów, gdzie pierwsze pole to sekundy. Narzędzie mówi o tym zamiast zgadywać, bo odczytanie ich jako standardowego crona dałoby błędny harmonogram.
Co znaczą @daily, @hourly i inne skróty?
@hourly to 0 * * * *, @daily i @midnight to 0 0 * * *, @weekly to 0 0 * * 0, @monthly to 0 0 1 * *, a @yearly i @annually to 0 0 1 1 *. @reboot uruchamia się raz przy starcie usługi cron, więc nie ma terminów do wypisania.