Jak utworzyć wyrażenie cron?
- 1.
Wybierz przykład lub kreator
Kliknij gotowy przykład (np. „Dni robocze o 9:00”) albo w kreatorze ustaw, jak często zadanie ma się uruchamiać.
- 2.
Dopracuj wyrażenie
Możesz ręcznie edytować wyrażenie - opis po polsku i lista uruchomień aktualizują się na bieżąco.
- 3.
Sprawdź najbliższe uruchomienia
Porównaj 10 najbliższych terminów z oczekiwaniami. Daty liczone są w strefie czasowej Twojej przeglądarki.
- 4.
Skopiuj do konfiguracji
Skopiuj wyrażenie i wklej je do crontaba (crontab -e), pliku workflow GitHub Actions lub manifestu CronJob.
Składnia cron - 5 pól
Wyrażenie cron to 5 pól oddzielonych spacjami: minuta godzina dzień-miesiąca miesiąc dzień-tygodnia.
| Pole | Zakres | Przykład |
|---|---|---|
| Minuta | 0-59 | 30 - w 30. minucie |
| Godzina | 0-23 | 9-17 - od 9 do 17 |
| Dzień miesiąca | 1-31 | 1,15 - 1. i 15. dnia |
| Miesiąc | 1-12 lub JAN-DEC | */3 - co 3 miesiące |
| Dzień tygodnia | 0-7 lub SUN-SAT (0 i 7 = niedziela) | 1-5 - poniedziałek-piątek |
Znaki specjalne: * - każda wartość, , - lista, - - zakres, / - krok. Przykład: */15 9-17 * * 1-5 oznacza „co 15 minut od 9:00 do 17:45 w dni robocze”. Skróty: @hourly, @daily, @weekly, @monthly, @yearly, @reboot (raz przy starcie systemu).
Najpopularniejsze wyrażenia cron
| Wyrażenie | Znaczenie |
|---|---|
* * * * * | co minutę |
*/5 * * * * | co 5 minut |
0 * * * * | co godzinę, o pełnej godzinie |
0 0 * * * | codziennie o północy |
0 9 * * 1-5 | w dni robocze o 9:00 |
0 3 * * 0 | w niedziele o 3:00 (np. kopia zapasowa) |
0 0 1 * * | 1. dnia każdego miesiąca o północy |
0 0 1 1 * | raz w roku, 1 stycznia |
Pułapka: gdy ustawisz jednocześnie dzień miesiąca i dzień tygodnia (np. 0 0 13 * 5), klasyczny cron uruchomi zadanie każdego 13. dnia oraz w każdy piątek - warunki łączone są przez „lub”, a nie „i”.
Crontab, GitHub Actions, Kubernetes i Quartz - różnice
| System | Pola | Strefa czasowa | Uwagi |
|---|---|---|---|
| crontab (Linux, cronie, Vixie) | 5 | strefa serwera | obsługuje @reboot, @daily itd. |
GitHub Actions on: schedule | 5 | zawsze UTC | najkrótszy odstęp 5 minut; przy dużym obciążeniu start może się opóźnić |
| Kubernetes CronJob | 5 | strefa kontrolera, od wersji 1.27 pole timeZone | obsługuje makra @hourly, @daily itp. |
Quartz / Spring @Scheduled | 6-7 (sekundy na początku, opcjonalnie rok) | konfigurowalna | znaki ?, L, W, #; w Quartz w jednym z pól dni trzeba wpisać ? |
Ponieważ GitHub Actions liczy czas w UTC, zadanie „o 8:00 czasu polskiego” wymaga wpisania 0 6 * * * latem (UTC+2) i 0 7 * * * zimą (UTC+1). Pomocny jest konwerter Unix timestamp.
Cron a zmiana czasu
W Polsce czas zmienia się w ostatnią niedzielę marca (z 2:00 na 3:00) i w ostatnią niedzielę października (z 3:00 na 2:00). Zadanie ustawione na 30 2 * * * w marcu trafia na godzinę, która nie istnieje, a w październiku na godzinę, która występuje dwa razy. Poszczególne implementacje cron radzą sobie z tym różnie - jedne pomijają, inne uruchamiają zadanie od razu po zmianie lub dwukrotnie. Ważne zadania (kopie zapasowe, raporty) najlepiej planować poza oknem 2:00-3:00 albo uruchamiać serwer w strefie UTC. Lista uruchomień w tym narzędziu pomija godziny, które nie istnieją.
Najczęściej zadawane pytania
Jak ustawić crona co 5 minut?
+
*/5 * * * *. Zadanie uruchomi się w minutach 0, 5, 10, …, 55 każdej godziny.Jak ustawić crona codziennie o północy?
+
0 0 * * * albo skrót @daily (równoważny @midnight).Jak uruchomić zadanie tylko w dni robocze?
+
0 9 * * 1-5 - od poniedziałku do piątku o 9:00. Cron nie zna świąt, więc w dni wolne zadanie również się uruchomi.Czy niedziela w cronie to 0 czy 7?
+
W jakiej strefie czasowej działa cron?
+
Jak ustawić crona co 30 sekund?
+
*/30 * * * * *. W crontabie można dodać dwa wpisy, z czego drugi zaczyna się od sleep 30.Co oznacza znak ? w wyrażeniu cron?
+
0 0 12 ? * MON-FRI.Aktualizacja: