Składnia Cron wyjaśniona: Opanowanie 5 pól
Pięciopolowa składnia cron jest zwodniczo prosta, ale niesamowicie potężna. Ten przewodnik rozkłada każde pole, każdy znak specjalny i zasady określające, jak się łączą, aby tworzyć harmonogramy od 'co minutę' do 'drugi wtorek nieparzystych miesięcy o 3:47'.
Pięć pól
Każde wyrażenie cron składa się z dokładnie pięciu pól w określonej kolejności: minuta godzina dzień-miesiąca miesiąc dzień-tygodnia. Zrozumienie, co każde pole kontroluje i jaki ma prawidłowy zakres, jest niezbędne do konstruowania poprawnych wyrażeń.
Pole minuty (0-59) kontroluje, w której minucie godziny zadanie się uruchamia. "0" oznacza o pełnej godzinie (:00), "30" oznacza w połowie godziny (:30), a "*" oznacza każdą minutę. To najdrobniejsza kontrola, jaką oferuje cron - nie można planować zadań w interwałach poniżej minuty za pomocą standardowego cron.
Pole godziny (0-23) używa formatu 24-godzinnego. "0" to północ, "12" to południe, a "23" to 23:00. Nie ma notacji AM/PM; cron rozumie tylko format 24-godzinny. Jeśli chcesz 14:00, użyj "14". Jeśli chcesz 2:00, użyj "2" (lub "02", wiodące zera są opcjonalne i ignorowane).
Pole dnia miesiąca (1-31) określa, którego dnia (dni) miesiąca ma być wykonane. "1" to pierwszy dzień miesiąca, "15" to środek, a "31" to ostatni dzień dla miesięcy z 31 dniami. Uważaj na daty 29-31, ponieważ nie wszystkie miesiące mają te dni. Zadanie zaplanowane na 31. nie zostanie wykonane w miesiącach z tylko 30 dniami.
Pole miesiąca (1-12) kontroluje, w których miesiącach zadanie jest wykonywane. "1" to styczeń, "12" to grudzień. Niektóre implementacje cron akceptują trzyliterowe skróty miesięcy jak "jan" lub "JAN", ale wartości numeryczne są uniwersalnie wspierane i zalecane dla przenośności.
Pole dnia tygodnia (0-6 lub 1-7, w zależności od implementacji) określa, w które dni tygodnia ma być wykonywane. Standardowy cron używa 0 dla niedzieli, 1 dla poniedziałku do 6 dla soboty. Niektóre implementacje akceptują też 7 dla niedzieli, co czyni zarówno 0 jak i 7 ważnymi dla niedzieli. Podobnie jak miesiące, niektóre warianty cron akceptują skróty (sun, mon, tue itp.), ale wartości numeryczne są najbezpieczniejsze.
Zrozumienie, jak te pola współdziałają, jest kluczowe. Gdy określone są zarówno dzień miesiąca, jak i dzień tygodnia (bez symboli wieloznacznych), zadanie uruchamia się, gdy którykolwiek warunek jest prawdziwy (logika LUB, nie I). To myli wielu użytkowników, którzy oczekują, że "0 0 13 * 5" uruchomi się "w piątek 13.", gdy faktycznie uruchamia się "13. każdego miesiąca LUB każdy piątek".
Znaki specjalne i operatory
Siła cron pochodzi ze znaków specjalnych, które pozwalają zwięźle wyrażać złożone harmonogramy. Gwiazdka (*) oznacza "każdą możliwą wartość" i jest najczęstszym znakiem specjalnym. W polu minut * oznacza każdą minutę (0-59). W polu miesiąca * oznacza każdy miesiąc (1-12).
Operator przecinka (,) wypisuje wiele konkretnych wartości. "0,15,30,45" w polu minut uruchamia się o :00, :15, :30 i :45 każdej godziny. "1,15" w polu dnia miesiąca uruchamia się 1. i 15. Możesz wypisać tyle wartości, ile potrzebujesz: "1,3,5,7,9,11" dla nieparzystych dni.
Myślnik (-) tworzy zakresy kolejnych wartości. "1-5" w polu dnia tygodnia oznacza od poniedziałku do piątku. "9-17" w polu godzin oznacza od 9:00 do 17:00. Zakresy są włącznie - oba punkty końcowe są zawarte. "1-3" oznacza 1, 2 i 3.
Ukośnik (/) tworzy wartości krokowe lub interwały. Format to "*/N" lub "zakres/N". "*/5" w polu minut oznacza "co 5 minut" (0, 5, 10, 15, ..., 55). "*/2" w polu godzin oznacza "co 2 godziny" (0, 2, 4, 6, ..., 22). Możesz łączyć kroki z zakresami: "10-50/5" oznacza 10, 15, 20, 25, 30, 35, 40, 45, 50.
Te operatory można łączyć w jednym polu. "1-5,10,15,20-25" jest prawidłowe i określa 1 do 5, 10, 15 i 20 do 25. "*/10,55" oznacza co 10 minut plus konkretnie o :55 (czyli 0, 10, 20, 30, 40, 50, 55).
Niektóre rozszerzone implementacje cron wspierają dodatkowe znaki specjalne. "L" (last - ostatni) w dniu miesiąca oznacza ostatni dzień miesiąca. "W" (weekday - dzień roboczy) znajduje najbliższy dzień roboczy do określonej daty. "#" określa N-te wystąpienie dnia (jak "2. wtorek"). Te rozszerzenia są potężne, ale nie uniwersalnie wspierane - standardowy cron ich nie zawiera.
Znak zapytania (?) pojawia się w niektórych implementacjach cron jako alias dla "*" w polach dnia miesiąca lub dnia tygodnia. Istnieje głównie dla jasności: użycie "?" w jednym polu i konkretnej wartości w drugim jasno pokazuje, że ograniczasz tylko jedno pole typu dnia. Standardowy cron nie wspiera "?"; zamiast tego użyj "*".
Zrozumienie pierwszeństwa operatorów i reguł kombinacji zapobiega błędom składni. Zakresy muszą być rosnące (1-5, nie 5-1). Wartości krokowe muszą być dodatnie. Listy powinny mieć wartości w prawidłowym zakresie pola. Większość implementacji cron nie waliduje twojej składni aż do wykonania, więc testowanie jest kluczowe.
Typowe wzorce składni
Opanowanie kilku typowych wzorców składni pokrywa większość rzeczywistych wymagań planowania. Te bloki konstrukcyjne można łączyć i dostosowywać dla prawie każdego harmonogramu.
Dla prostych regularnych interwałów użyj składni krokowej: "*/N * * * *" uruchamia się co N minut. "0 */N * * *" uruchamia się co N godzin (w minucie 0). Ten wzorzec jest powszechny dla monitorowania, odpytywania API lub okresowych zadań porządkujących.
Dla codziennych zadań o określonych porach użyj "M H * * *", gdzie M to minuta, a H to godzina. "0 2 * * *" uruchamia się o 2:00 codziennie. "30 14 * * *" uruchamia się o 14:30 codziennie. Symbole wieloznaczne w polach miesiąca i obu polach dni oznaczają "każdy dzień".
Dla zadań tylko w dni robocze użyj "M H * * 1-5". "0 9 * * 1-5" uruchamia się o 9:00 od poniedziałku do piątku. Ten wzorzec jest niezbędny dla zadań tylko w dni robocze, jak wysyłanie raportów dni roboczych lub uruchamianie integracji z zewnętrznymi systemami biznesowymi, które działają tylko w dni robocze.
Dla konkretnych dni tygodnia użyj "M H * * D", gdzie D to 0-6. "0 0 * * 0" uruchamia się w niedziele o północy. "0 18 * * 5" uruchamia się w piątki o 18:00. Wiele dni też działa: "0 8 * * 1,3,5" uruchamia się w poniedziałki, środy i piątki o 8:00.
Dla miesięcznych zadań użyj "M H D * *", gdzie D to dzień miesiąca. "0 0 1 * *" uruchamia się pierwszego dnia każdego miesiąca o północy. "0 12 15 * *" uruchamia się 15. każdego miesiąca o 12:00, idealne dla przetwarzania w połowie miesiąca.
Dla konkretnych miesięcy lub pór roku dodaj specyfikację miesiąca: "M H D M *". "0 0 1 1 *" uruchamia się rocznie 1 stycznia. "0 0 1 1,4,7,10 *" uruchamia się kwartalnie. "0 0 1 6-8 *" uruchamia się pierwszego dnia czerwca, lipca i sierpnia (miesiące letnie).
Dla złożonych harmonogramów łącz operatory kreatywnie. "0 9-17/2 * * 1-5" uruchamia się o 9, 11, 13, 15 i 17 w dni robocze - co 2 godziny podczas godzin pracy. "*/15 9-17 * * 1-5" uruchamia się co 15 minut, ale tylko podczas godzin pracy w dni robocze.
Gdy potrzebujesz harmonogramu, który nie pasuje do tych wzorców, rozłóż go na komponenty. Pomyśl o tym, kiedy ma się uruchamiać (czas), jak często (interwał), które dni (dzień tygodnia), które daty (dzień miesiąca) i które miesiące (miesiąc). Następnie skonstruuj każde pole zgodnie z tymi ograniczeniami.
Wypróbuj Narzędzie
Crontab Generator