Jak czytać wyrażenie cron – pole po polu
Wyrażenie cron to krótki wiersz tekstu, który mówi harmonogramowi, kiedy uruchomić zadanie. Typowa postać ma pięć pól oddzielonych spacjami: minuta, godzina, dzień miesiąca, miesiąc i dzień tygodnia. Wiersz 0 9 * * 1-5 oznacza godzinę 09:00 od poniedziałku do piątku. Każde pole to liczba, nazwa, lista, zakres albo krok, albo * oznaczająca każdą wartość. Zadanie uruchamia się o każdej porze, w której wszystkie pola pasują.
Pięć pól
| Pole | Dozwolone wartości | Przykład |
|---|---|---|
| Minuta | 0 do 59 | 30 to minuta 30 godziny |
| Godzina | 0 do 23 | 9 to 09:00, w zegarze 24-godzinnym |
| Dzień miesiąca | 1 do 31 | 15 to 15. dzień miesiąca |
| Miesiąc | 1 do 12 albo JAN do DEC | 3 albo MAR to marzec |
| Dzień tygodnia | 0 do 6 albo SUN do SAT | 0 albo SUN to niedziela, 1 to poniedziałek |
Niektóre systemy akceptują też 7 jako niedzielę, ale nie wszystkie, więc używaj 0 albo SUN. Cron w tej postaci nie ma pola sekund, więc najmniejszy krok to jedna minuta.
Listy, zakresy, kroki i nazwy
oznacza każdą wartość w polu.* * * *uruchamia się co minutę.- Lista używa przecinków.
0 9,17 * * *uruchamia się o 09:00 i o 17:00 każdego dnia. - Zakres używa myślnika.
1-5w polu dnia tygodnia oznacza od poniedziałku do piątku. - Krok używa ukośnika.
*/15w polu minuty oznacza 0, 15, 30 i 45.10-30/5oznacza 10, 15, 20, 25 i 30. - Nazwy, takie jak
MON-FRI, mogą zastąpić liczby. Są łatwiejsze do odczytania, jeśli harmonogram je akceptuje.
Te elementy można łączyć. 0 8-18/2 * * * uruchamia się w minucie 0 co drugą godzinę od 08:00 do 18:00.
Typowe harmonogramy
| Wyrażenie | Znaczenie |
|---|---|
* * * * * | Co minutę |
/15 * * * | Co 15 minut |
0 * * * * | W minucie 0 każdej godziny |
0 2 * * * | Każdego dnia o 02:00 |
0 9 * * 1-5 | 09:00, od poniedziałku do piątku |
0 9,17 * * * | 09:00 i 17:00 każdego dnia |
30 6 1 * * | 06:30 pierwszego dnia każdego miesiąca |
0 0 * * 0 | Północ w każdą niedzielę |
0 0 1 1 * | Północ 1 stycznia |
/5 9-17 * 1-5 | Co 5 minut od 09:00 do 17:55, od poniedziałku do piątku |
Zwróć uwagę, że 0 0 * * to północ, a 0 12 * * to południe. Pomylenie godziny to jeden z najczęstszych błędów.
Dzień miesiąca i dzień tygodnia
Gdy zarówno pole dnia miesiąca, jak i pole dnia tygodnia są ograniczone, zadanie uruchamia się, gdy pasuje jedno z nich. To klasyczna reguła w Vixie cron i wielu systemach z niego wywodzących się. Zatem 0 0 13 * 5 uruchamia się o północy 13. dnia każdego miesiąca oraz każdego piątku. Często oczekuje się tylko piątku 13., a dostaje się więcej uruchomień, niż planowano.
Jeśli jedno z tych dwóch pól to *, liczy się tylko drugie. Aby uruchomić zadanie w piątek trzynastego, zaplanuj je na każdy piątek i sprawdź datę wewnątrz skryptu. Inne harmonogramy, w tym niektóre usługi chmurowe, mogą stosować inne zasady, więc przeczytaj ich dokumentację.
Strefy czasowe i czas letni
Cron działa według zegara maszyny albo usługi, na której działa, zwykle według czasu lokalnego tej maszyny. Zadanie ustawione na 02:30 uruchomi się o 02:30 według tego zegara. Najpierw sprawdź strefę (w systemie Linux polecenie date ją pokazuje). Jeśli chcesz, by zadania podążały za jednym zegarem wszędzie, wiele zespołów uruchamia serwery w UTC, a niektóre harmonogramy pozwalają ustawić strefę czasową dla każdego zadania.
Czas letni zmienia zegar dwa razy w roku. Wiosną wiele miejsc przeskakuje z 02:00 od razu na 03:00, więc zadanie o 02:30 nie ma kiedy się uruchomić. Jesienią godzina od 01:00 do 01:59 występuje dwa razy. Harmonogramy radzą sobie z tymi przypadkami inaczej. Jedne pomijają zadanie, inne uruchamiają je raz, a jeszcze inne dwa razy. Trzymaj zadania poza wczesnoporannym oknem zmiany czasu albo użyj UTC, jeśli ta różnica ma dla ciebie znaczenie.
Sześć pól i Quartz
Niektóre harmonogramy dodają pole sekund na początku, więc /10 * * * * uruchamia się co 10 sekund. Harmonogram Quartz dla Javy używa sekund, minut, godzin, dnia miesiąca, miesiąca, dnia tygodnia i opcjonalnego roku, i dodaje cztery znaki specjalne:
?oznacza „brak konkretnej wartości”. Quartz wymaga go w polu dnia miesiąca albo dnia tygodnia, w zależności od tego, którego nie ustawiasz.Loznacza ostatni.Lw polu dnia miesiąca to ostatni dzień miesiąca, a6Lw polu dnia tygodnia to ostatni piątek.Woznacza najbliższy dzień roboczy.15Wto dzień roboczy najbliższy 15. dnia i nie przeskakuje do innego miesiąca.#oznacza n-ty dzień tygodnia.6#3to trzeci piątek.
Quartz numeruje dni inaczej niż postać pięciopolowa. Jego 1 to niedziela, a 7 to sobota, więc od poniedziałku do piątku to 2-6, a nie 1-5. Zawsze sprawdź, jakiego formatu używa twój harmonogram, zanim skopiujesz wiersz.
Typowe błędy
*/7w polu minuty. Wartości to 0, 7, 14 i tak dalej, aż do 56. Następna byłaby 63, która nie istnieje, więc po 56 kolejne uruchomienie jest w minucie 0 następnej godziny. Odstęp wynosi tylko cztery minuty, a rozstaw jest nierówny. Użyj kroku, który dzieli 60 bez reszty, na przykład 5, 10, 15 albo 30.- 30 lutego. Taka data nie istnieje, więc
0 0 30 2 *nigdy się nie uruchamia. Tak samo jest z 31. dniem w miesiącu, który ma 30 dni. Przy regule „jedno z dwóch” ograniczenie dnia tygodnia może nadal powodować uruchomienia w inne dni, więc sprawdź wynik. - Godzina 24 albo minuta 60. To wartości spoza zakresu. Większość harmonogramów odrzuca je przy zapisie, ale nie wszystkie.
- Oczekiwanie sekund. Wiersz pięciopolowy uruchamia się tylko o pełnych minutach.
- Mylenie crona z wyrażeniami regularnymi. W cronie
oznacza każdą wartość. W wyrażeniu regularnymoznacza powtórzenie poprzedzającego elementu. Do wzorców użyj tester regex, a wiersze cron trzymaj osobno.
Sprawdź kolejne uruchomienia
Zanim polegasz na harmonogramie, przeczytaj wiersz zwykłymi słowami i wypisz kilka najbliższych czasów uruchomienia. Objaśnienie wyrażenia cron robi jedno i drugie. To najszybszy sposób, by wychwycić regułę „jedno z dwóch” albo nietypowy krok.
Szybkie odpowiedzi
Czy pierwsze pole to minuty czy sekundy?
Minuty, w standardowej postaci pięciopolowej. Tylko niektóre harmonogramy sześciopolowe dodają sekundy i umieszczają je na początku.
Dlaczego moje zadanie uruchamia się w piątki i także 13. dnia miesiąca?
Pole dnia miesiąca i pole dnia tygodnia są ustawione, więc zadanie uruchamia się, gdy pasuje jedno z nich. Ustaw jedno pole na *, jeśli chcesz tylko drugiego.
Czy cron używa UTC?
Tylko wtedy, gdy maszyna albo usługa jest ustawiona na UTC. W przeciwnym razie używa lokalnej strefy czasowej tego systemu.
Przetłumaczone z Wersja angielska przy wsparciu AI.
Komentarze
Brak komentarzy. Bądź pierwszy.


