Utilia

Generator wyrażeń cron

Zbuduj wyrażenie cron pole po polu, przeczytaj je słowami, sprawdź najbliższe uruchomienia w dowolnej strefie i przekształć je do systemd, Quartz lub AWS.

Kreator

PoleTrybWartość
Minuta0–59
Godzina0–23
Dzień miesiąca1–31, L
Miesiąc1–12 lub JAN–DEC
Dzień tygodnia0–7 (0 i 7 = niedziela) lub SUN–SAT

Jak zbudować wyrażenie cron

  1. Wpisz lub wklej wyrażenie w polu Wyrażenie cron albo wybierz je z listy Gotowe wzorce. Akceptowane są też makra, takie jak @daily czy @weekly.
  2. Możesz też użyć sekcji Kreator: dla każdego pola wybierz Tryb (Każda, Co N, Konkretne wartości, Zakres lub Własne) i uzupełnij Wartość. Wyrażenie aktualizuje się na bieżąco, a edycja wyrażenia aktualizuje kreator.
  3. Zaznacz Dodaj pole sekund (6 pól), jeśli twój harmonogram obsługuje sekundy.
  4. Przeczytaj harmonogram w sekcji Opis słowami – opis jest generowany po polsku – a potem sprawdź listę Najbliższe uruchomienia. Wybierz Strefa czasowa serwera, na którym działa zadanie, oraz w polu Ile pokazać liczbę uruchomień na liście.
  5. Skopiuj wyrażenie przyciskiem Kopiuj albo skorzystaj z jednego z Inne formaty.

Błędy są objaśniane pole po polu, np. „Minuta: 61 jest poza zakresem (0–59)”, więc wiesz dokładnie, co poprawić.

Pięć pól crona

Standardowy wiersz crona (Vixie cron) ma pięć pól, a po nich polecenie:

Pole Dozwolone wartości
Minuta 0–59
Godzina 0–23
Dzień miesiąca 1–31
Miesiąc 1–12 lub JAN–DEC
Dzień tygodnia 0–7 (0 i 7 to niedziela) lub SUN–SAT

Każde pole przyjmuje * (każda wartość), listę 1,15, zakres 9-17, krok */15 (co 15 jednostek) albo zakres z krokiem 0-30/10. Zatem */15 9-17 * * 1-5 oznacza co 15 minut od 9:00 do 17:45, od poniedziałku do piątku.

Jedna zasada zaskakuje wiele osób: gdy ograniczysz jednocześnie Dzień miesiąca i Dzień tygodnia, klasyczny cron uruchamia zadanie, gdy pasuje którekolwiek z nich. 0 0 13 * 5 działa każdego 13. dnia miesiąca i w każdy piątek, a nie tylko w piątek trzynastego. Narzędzie wyświetla w takim przypadku ostrzeżenie.

Najbliższe uruchomienia i strefy czasowe

Cron korzysta z zegara maszyny albo z ustawienia CRON_TZ/TZ w crontabie. Lista Najbliższe uruchomienia jest liczona dla wybranej strefy czasowej, z uwzględnieniem zmiany czasu: przy wiosennej zmianie zadanie ustawione na 2:30 może zostać pominięte, a jesienią – zależnie od implementacji – uruchomić się raz albo dwa razy. Daty i godziny są wyświetlane w polskim formacie. Dla zadań, które muszą wykonać się dokładnie raz, wybieraj godziny spoza przedziału 1:00–3:00 albo używaj UTC.

Vixie cron, timery systemd, Quartz i AWS

  • Timery systemd używają OnCalendar= z inną składnią: Mon..Fri *-*-* 09..17:00/15:00. Warunki dnia tygodnia i daty są łączone przez AND, a nie OR, więc niektóre wyrażenia cron nie mają dokładnego odpowiednika.
  • Quartz i Spring stawiają na początku pole sekund i mogą dodać pole roku. Jedno z dwóch pól dnia musi zawierać ?, a Quartz numeruje dni tygodnia 1–7 od niedzieli, inaczej niż cron (0–6). Narzędzie zapisuje dni tygodnia nazwami (MON-FRI), aby uniknąć tej pułapki.
  • AWS EventBridge używa cron(minutes hours day month weekday year): sześć pól, bez sekund, ? w jednym z pól dnia i rok na końcu.

Standardowy cron nie ma pola sekund. Postać 6-polową z sekundami obsługuje wiele bibliotek (node-cron, Spring, Quartz), ale nie systemowy crontab.

Najczęściej zadawane pytania

Jak uruchamiać zadanie co 5 minut?

Użyj */5 * * * *. Zadanie wykona się w minutach 0, 5, 10… każdej godziny.

Jak uruchomić zadanie ostatniego dnia miesiąca?

Wiele harmonogramów akceptuje L w polu dnia miesiąca: 0 18 L * *. W zwykłym Vixie cron uruchamiaj zadanie codziennie w dniach 28–31 i sprawdzaj w skrypcie, czy jutro jest pierwszy dzień miesiąca.

Co robi @reboot?

Uruchamia polecenie jeden raz, przy starcie demona cron. Nie ma harmonogramu, więc narzędzie nie może pokazać dla niego terminów uruchomień.

Dlaczego moje zadanie nie uruchamia się o pokazanej godzinie?

Sprawdź strefę czasową serwera, to, czy edytujesz crontab użytkownika, czy /etc/crontab (który ma dodatkowe pole użytkownika), oraz zmienną PATH: cron startuje z minimalnym środowiskiem.

Niedziela to 0 czy 7?

Jedno i drugie. W polu dnia tygodnia 0 i 7 oznaczają niedzielę, 1 to poniedziałek, a 6 – sobota.