Jak czytać wiersz crontab

Wyrażenie cron ma pięć pól: minuta (0-59), godzina (0-23), dzień miesiąca (1-31), miesiąc (1-12) i dzień tygodnia (0-7, gdzie 0 i 7 to niedziela). Gwiazdka oznacza „dowolny”, przecinek oddziela wartości, myślnik określa zakres, a ukośnik krok: */15 w minutach oznacza 0, 15, 30 i 45.

Tak więc 0 9 * * 1-5 uruchamia zadanie o 9:00 od poniedziałku do piątku, 30 2 1 * * o 2:30 pierwszego dnia każdego miesiąca, a */10 * * * * co dziesięć minut. Makra to skróty: @daily to 0 0 * * *, @hourly to 0 * * * *, @weekly to 0 0 * * 0.

Jeden wyjątek zaskakuje wielu: jeśli zarówno dzień miesiąca, jak i dzień tygodnia różnią się od *, cron uruchamia zadanie, gdy prawdziwy jest którykolwiek z nich. 0 12 1 * 1 nie znaczy „pierwszego dnia miesiąca, jeśli to poniedziałek”, lecz „każdego pierwszego dnia miesiąca i w każdy poniedziałek”.

Częste błędy

  • Pisanie * * * * * w znaczeniu „raz dziennie”: to oznacza co minutę.
  • Zapominanie, że cron używa strefy czasowej serwera, a nie oglądającego: najbliższe uruchomienia są tu w strefie twojej przeglądarki.
  • Oczekiwanie zadania 31. dnia każdego miesiąca: w miesiącach 30-dniowych i w lutym po prostu się nie uruchomi.

Najczęstsze pytania

Czy cron obsługuje sekundy?

Klasyczny cron nie: najmniejszą jednostką jest minuta. Niektóre systemy, jak Quartz czy Spring, dodają szóste pole na sekundy, ale z inną składnią.

Co się dzieje przy zmianie czasu?

W nocy, gdy zegar przesuwa się do przodu, zadanie o 2:30 może zostać pominięte; przy cofnięciu może uruchomić się dwa razy. Dlatego ważne zadania planuje się poza godzinami 2-3 lub w UTC.

Czy mogę używać nazw dni i miesięcy?

Tak: MON-FRI dla dni i JAN-DEC dla miesięcy, po angielsku i bez rozróżniania wielkości liter.

Jak działa to obliczenie

Każde pole jest rozwijane w zbiór dozwolonych wartości: * to cały zakres, a-b zakres, x/n wartości od x z krokiem n, a listy rozdzielone przecinkami są łączone. W dniu tygodnia 7 zamienia się na 0 (niedziela). Dzień pasuje, jeśli jego miesiąc jest dozwolony, a gdy oba pola dni są ograniczone – jeśli pasuje dzień miesiąca lub dzień tygodnia. Najbliższe uruchomienia są szukane dzień po dniu, do ośmiu lat naprzód, w strefie czasowej przeglądarki.