Parser wyrażeń cron

Wskazówka dla danych wejściowych

Przejmujesz plik crontab, a w nim mnóstwo wyrażeń typu 0 */2 * * 1-5, 15 4 1 * *, */30 8-18 * * *. Ten parser przyjmuje standardowe wyrażenie cron z 5 polami i zwraca zrozumiały opis po angielsku (np. “every 2 hours on weekdays”) oraz kolejne 5 momentów, w których zadanie faktycznie się uruchomi. Przydatny, by zrozumieć starsze harmonogramy i sprawdzić nowy przed wdrożeniem.

Jak przeanalizować wyrażenie cron

  1. 1

    Wklej wyrażenie

    Standardowe wyrażenie z 5 polami (`* * * * *`): minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia.

  2. 2

    Przeczytaj opis po angielsku

    Parser przekształca każde pole na prosty angielski, na przykład "At minute 0, every 2 hours, on day(s) of week 1-5."

  3. 3

    Sprawdź podgląd kolejnych uruchomień

    5 najbliższych momentów uruchomienia. Jeśli nie odpowiadają Twojemu zamiarowi, dopracuj wyrażenie.

  4. 4

    Popraw nieprawidłowe pola

    Wyrażenia z błędną liczbą pól lub wartościami poza zakresem są odrzucane z komunikatem wskazującym problematyczne pole.

Dekodowanie każdego pola

Każde pole ma własny dopuszczalny zakres i specjalne znaki:

Pole Zakres Obsługiwane symbole wieloznaczne
Minuta 0-59 * , - /
Godzina 0-23 * , - /
Dzień miesiąca 1-31 * , - /
Miesiąc 1-12 * , - /
Dzień tygodnia 0-7 * , - /
  • * = każda wartość (* w polu minut oznacza każdą minutę).
  • 1,5,10 = lista wartości.
  • 1-5 = zakres wartości.
  • */15 lub 0-45/15 = krok, liczony od początku zakresu pola.
  • Dzień tygodnia 0 i 7 to oba niedziela, więc obie konwencje są akceptowane. Nazwy miesięcy i dni tygodnia, takie jak JAN czy MON, nie są akceptowane; używaj liczb.

Przykłady z objaśnieniem

Wyrażenie Po angielsku
0 */2 * * 1-5 At minute 0 every 2 hours, Monday through Friday
15 4 1 * * At 04:15 on the 1st day of every month
*/30 8-18 * * * Every 30 minutes between 08:00 and 18:59
0 0 1,15 * * At midnight on the 1st and 15th of every month
0 22 * * 0 At 22:00 every Sunday

Co akceptuje parser

  • Dokładnie 5 pól: minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia. Wyrażenia Quartz z 6 lub 7 polami (z sekundami lub rokiem) są odrzucane.
  • Poprawne zakresy: każda wartość musi mieścić się w swoim polu, na przykład minuta 0-59, godzina 0-23, dzień miesiąca 1-31, miesiąc 1-12 i dzień tygodnia 0-7.
  • Dodatnie kroki: wartość po / musi być liczbą dodatnią (*/0 jest odrzucane).
  • Brak nazwanych skrótów: @daily, @reboot i podobne skróty nie są akceptowane. Najpierw rozwiń je do formy z 5 polami (na przykład @daily = 0 0 * * *).

Dzień miesiąca i dzień tygodnia razem

Gdy ustawione są jednocześnie dzień miesiąca i dzień tygodnia, ten parser planuje uruchomienie tylko wtedy, gdy oba pasują: 0 0 1 * MON odpala się zatem tylko wtedy, gdy 1. dzień wypada w poniedziałek. Większość implementacji crona w Linuksie traktuje te dwa pola jako LUB (zadanie działa, gdy pasuje którekolwiek). Sprawdź więc wyrażenie względem harmonogramu, którego faktycznie używasz.

Uwaga o strefie czasowej

Czasy w podglądzie są obliczane według zegara serwera, który działa w UTC. Jeśli Twój crontab działa na maszynie w innej strefie czasowej, wyświetlane tu czasy mogą różnić się od czasów na tej maszynie.

Najczęściej zadawane pytania

Nie. Akceptowane są tylko standardowe wyrażenia z 5 polami. Wyrażenia Quartz z sekundami (6 pól) lub z rokiem (7 pól) są odrzucane z komunikatem o błędzie.

Zwykle z jednego z tych powodów: podgląd korzysta z zegara serwera w UTC, a Twój crontab działa w innej strefie czasowej; ustawione są zarówno dzień miesiąca, jak i dzień tygodnia (ten parser wymaga, by oba pasowały); albo krok, który zaczyna się od nowa na początku każdej godziny lub dnia.

Tak, jeśli jest to standardowe wyrażenie z 5 polami, którego używa Kubernetes (domyślnie UTC). Pamiętaj, że podgląd tutaj korzysta z zegara serwera w UTC: jeśli klaster działa w innej strefie czasowej, czasy mogą się różnić.

Cron w Linuksie akceptuje nazwane skróty: @reboot (przy starcie), @yearly / @annually (0 0 1 1 *), @monthly, @weekly, @daily, @hourly. Ten parser ich nie akceptuje, więc najpierw rozwiń skrót do równoważnego wyrażenia z 5 polami i dopiero potem wklej je tutaj.

Powiązane narzędzia