Kreator i tłumacz wyrażeń cron
Zbuduj wyrażenie cron albo odczytaj istniejące w zrozumiałym języku.
O tym narzędziu
Wybierz, jak często zadanie ma się uruchamiać, aby zbudować wyrażenie cron, albo wpisz istniejące, aby otrzymać opis w zrozumiałym języku, rozbicie na pola i najbliższe terminy uruchomienia w Twojej strefie czasowej. Obsługuje zakresy, listy, kroki, nazwy miesięcy i dni oraz skróty, takie jak @daily.
Jak z tego korzystać
- Aby odczytać wyrażenie, wklej je w trybie Objaśnij i zobacz jego opis w zrozumiałym języku.
- Aby je utworzyć, przełącz się na tryb Zbuduj i wybierz, jak często zadanie ma się uruchamiać.
- Sprawdź najbliższe uruchomienia, pokazane w Twojej strefie czasowej.
- Skopiuj wyrażenie do crontaba, konfiguracji CI lub harmonogramu zadań.
Pytania
- Co oznacza pięć pól?
- Po kolei: minuta (0–59), godzina (0–23), dzień miesiąca (1–31), miesiąc (1–12) i dzień tygodnia (0–6, niedziela to 0 lub 7). * oznacza każdą wartość.
- Jak uruchamiać zadanie co 5 minut?
- Użyj */5 * * * *. /5 to krok, czyli co piąta wartość danego pola, zaczynając od 0.
- Co, jeśli ustawię zarówno dzień miesiąca, jak i dzień tygodnia?
- W klasycznym cronie zadanie uruchamia się, gdy pasuje którekolwiek z nich, a nie oba. Dlatego 0 9 1 * MON uruchamia się o 9:00 pierwszego dnia każdego miesiąca oraz w każdy poniedziałek.
- Jakiej strefy czasowej używa cron?
- Strefa czasowa maszyny lub usługi, która je uruchamia – na serwerach i w CI to często UTC. Najbliższe uruchomienia są tu pokazywane w Twoim czasie lokalnym, więc przelicz je, jeśli Twój serwer używa UTC.
- Jak uruchomić zadanie cron co 30 sekund?
- Cron tego nie potrafi: jego najmniejszą jednostką jest jedna minuta. Popularne obejście to dwa wpisy: jeden uruchamia polecenie, a drugi sleep 30, a po nim polecenie. Do wszystkiego, co ma być precyzyjniejsze lub częstsze, użyj timera systemd albo długo działającego procesu z własną pętlą.
- Jak uruchomić zadanie w ostatni dzień miesiąca?
- Standardowy cron nie zna L. Zaplanuj zadanie na dni 28-31, np. 0 23 28-31 * *, i zacznij polecenie od sprawdzenia, czy jutro jest 1. dzień miesiąca, na przykład [ $(date -d tomorrow +\%d) = 01 ] && your-command, co wymaga GNU date.
- Co oznacza @reboot w crontabie?
- @reboot uruchamia polecenie raz, gdy startuje demon crona, zwykle zaraz po uruchomieniu maszyny. Obsługują go cronie i Vixie cron, ale nie jest to harmonogram czasowy, więc to narzędzie nie może pokazać dla niego następnych uruchomień i zgłasza błąd. Na maszynach z systemd lepszym wyborem jest często jednostka usługi (service unit).
Dlaczego moje zadanie cron się nie uruchamia?
Najpierw sprawdź, czy cron w ogóle widzi zadanie. Uruchom crontab -l jako ten sam użytkownik i upewnij się, że plik kończy się znakiem nowej linii, bo niektóre wersje crona ignorują ostatnią linię bez niego. Potem sprawdź harmonogram: wklej go tutaj i przeczytaj następne uruchomienia. Częstą niespodzianką jest */45 w polu minut, które uruchamia zadanie o :00 i :45 każdej godziny, a nie co 45 minut.
Jeśli harmonogram jest poprawny, winne jest zwykle środowisko. Cron uruchamia zadania z minimalnym PATH i bez profilu powłoki, więc polecenia działające w Twoim terminalu kończą się błędem „command not found”. Używaj ścieżek bezwzględnych, ustaw PATH na początku crontaba i kieruj wyjście do logu przez >> /tmp/job.log 2>&1, aby widzieć błędy. Pamiętaj też, że % ma w liniach crontaba specjalne znaczenie i trzeba go escapować jako \%.
Składnia crona: zakresy, listy, kroki i skróty
Każde pole przyjmuje więcej niż pojedynczą liczbę. Zakres, np. 9-17, pasuje do każdej wartości od 9 do 17, lista, np. 1,15, pasuje do każdej wymienionej wartości, a krok, np. */15, pasuje do co piętnastej wartości, zaczynając od minimum pola. Można je łączyć: 0-30/10 w polu minut oznacza 0, 10, 20 i 30. Pola miesiąca i dnia tygodnia przyjmują też nazwy, takie jak JAN czy MON-FRI.
Skróty zastępują całe wyrażenie: @hourly to 0 * * * *, @daily i @midnight to 0 0 * * *, @weekly to 0 0 * * 0, @monthly to 0 0 1 * *, a @yearly lub @annually to 0 0 1 1 *. W polu dnia tygodnia zarówno 0, jak i 7 oznaczają niedzielę. Tabela Pola w tym tłumaczu wyrażeń cron pokazuje, do jakich wartości rozwija się każde pole – to najszybszy sposób na sprawdzenie podchwytliwej kombinacji.
Crontab a cron w Kubernetes, GitHub Actions i Quartz
Format pięciopolowy jest wspólny dla linuksowego crontaba, CronJobów w Kubernetes i harmonogramów GitHub Actions, więc wyrażenie zbudowane w tym generatorze crona działa we wszystkich trzech. GitHub Actions zawsze używa UTC, uruchamia zadania najwyżej co 5 minut i przy dużym obciążeniu może startować zaplanowane zadania z opóźnieniem. Kubernetes używa strefy czasowej kontrolera, chyba że ustawisz spec.timeZone. Żaden z nich nie obsługuje pola sekund.
Quartz, Spring i AWS EventBridge używają dłuższych formatów. Quartz i Spring dodają pole sekund na początku, a AWS pole roku na końcu. Quartz i AWS wymagają też ? w jednym z dwóch pól dnia, a wszystkie trzy obsługują dodatki, takie jak L dla ostatniego dnia i # dla n-tego dnia tygodnia. Takie wyrażenia są tu odrzucane, więc usuń dodatkowe pola i przepisz L lub # ręcznie.
Najczęstsze wyrażenia cron
Skopiuj jeden z tych harmonogramów albo wklej go do narzędzia powyżej, aby zobaczyć najbliższe uruchomienia.
| Wyrażenie | Znaczenie |
|---|---|
* * * * * | Co minutę |
*/5 * * * * | Co 5 minut |
*/15 * * * * | Co 15 minut |
0 * * * * | Co godzinę |
0 */6 * * * | O pełnej godzinie, co 6 godzin |
0 0 * * * | O 00:00 |
30 2 * * * | O 02:30 |
0 9 * * 1-5 | O 09:00, od poniedziałek do piątek |
0 0 * * 0 | O 00:00, tylko niedziela |
0 0 1 * * | O 00:00, 1-ego dnia miesiąca |
0 0 1 1 * | O 00:00, 1-ego dnia miesiąca, tylko styczeń |
Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem