Składnia wyrażeń cron
Wyrażenie cron to pięć pól opisujących kiedy coś powinno się uruchomić. Każde pole mówi które wartości jego jednostki są dopuszczalne, i zadanie uruchamia się każdej minuty gdzie wszystkie pięć się zgadza. To cały model: nie ma pojęcia czasu trwania, nie ma "każde 90 minut", i nigdzie nie są przechowywane stan następnego uruchomienia.
Pola czyta się od lewej do prawej jako minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia. Przykłady na dole to te po które ludzie faktycznie sięgają, i każdy z nich przechodzi parser cron tej strony przed budowaniem tej strony.
Ostatnia sekcja wymienia składnię która wygląda jak cron ale tu się nie przyjmuje: rozszerzenia Quartza i Jenkinsa, i forma sześciopola z sekundami. Warto je znać bo skopiowane wyrażenie które jedno z nich używa po prostu zawali się.
Pięć pól
7Wiersz cron to pięć pól oddzielonych spacjami, potem polecenie. Każde pole musi być obecne; nie ma sposobu aby pominąć jedno.
| Wyrażenie | Zakres | Znaczenie |
|---|---|---|
| * * * * * | min hod dom mes dow | Pięć pól w porządku: minuta, godzina, dzień miesiąca, miesiąc, dzień tygodniaPięć gwiazdek oznacza każdą minutę każdego dnia — najluźniejsze możliwe wyrażenie. |
| minute | 0-59 | Pierwsze pole |
| hour | 0-23 | Drugie pole, na zegarze 24-godzinnym |
| day of month | 1-31 | Trzecie poleDzień który nie istnieje w danym miesiącu jest po prostu pomijany — 31 uruchamia się siedem razy do roku, nie dwanaście. |
| month | 1-12 | Czwarte pole |
| day of week | 0-7 | Piąte pole, niedziela na pierwszymZarówno 0 jak i 7 oznaczają niedzielę, dlatego zakres idzie do siedmiu nie do sześciu. |
| 0 5 13 * 5 | Gdy oba pola dnia są ograniczone, cron uruchamia się w każdy z nich — nie w obydwa narazTo uruchamia się 13 i każdy piątek, więc to nie jest "piątek trzynasty". To jedyne prawidło crona które wszystkich zaskakuje. |
Operatory
10Te same cztery operatory pracują w każdym polu; zmienia się tylko zakres liczb które przyjmują.
| Wyrażenie | Zakres | Znaczenie |
|---|---|---|
| * | Każda wartość którą pole pozwala | |
| 1,15,30 | Lista poszczególnych wartości | |
| 9-17 | Zakres włącznie z obydwoma końcami | |
| */15 | Każda n-ta wartość w całym polu*/15 w polu minut oznacza :00, :15, :30 i :45 — liczy od dna zakresu, nie od teraz. | |
| 9-17/2 | Każda n-ta wartość w zakresu | |
| 5/10 | Każda n-ta wartość od punktu startowego do końca pola | |
| 0,30 9-17 * * 1-5 | Operatory kombinują się swobodnie w każdym poluW pół godziny po godzinie, między dziewiątą a piątą, poniedziałek do piątku. | |
| JAN-DEC | 1-12 | Nazwy miesięcy, trzy litery, bez względu na wielkość |
| SUN-SAT | 0-6 | Nazwy dni, trzy litery, bez względu na wielkość |
| 7 | 0 | Niedziela, napisana drugim sposobem |
Skrótowe makra
7Siedem nazw które zastępują całe wyrażenie. To wygoda formatu crontab niż gramatyka pól, więc harmonogram który czyta stringi cron wcale ich nie musi przyjmować.
| Wyrażenie | Zakres | Znaczenie |
|---|---|---|
| @hourly | 0 * * * * | Na początku każdej godziny |
| @daily | 0 0 * * * | Raz dziennie o północy |
| @midnight | 0 0 * * * | To samo co @daily |
| @weekly | 0 0 * * 0 | Raz w tygodniu, niedziela o północy |
| @monthly | 0 0 1 * * | Pierwszego dnia miesiąca o północy |
| @yearly | 0 0 1 1 * | Pierwszego stycznia o północy |
| @annually | 0 0 1 1 * | To samo co @yearly |
Gotowe przykłady
14Czytaj je od prawej do lewej gdy przestają mieć sens: najgrubsze pole jest po prawej i decyduje który dni nawet są oceniane pola drobniejsze.
| Wyrażenie | Zakres | Znaczenie |
|---|---|---|
| * * * * * | Każdą minutę | |
| */5 * * * * | Każde pięć minut | |
| 0 * * * * | Każdą godzinę, zawsze o jej starcie | |
| 0,30 * * * * | Każde pół godziny | |
| 0 3 * * * | Każdego dnia o 03:00 | |
| 0 9,17 * * * | Dwa razy dziennie, o 09:00 i 17:00 | |
| */15 9-17 * * 1-5 | Każde piętnaście minut podczas godzin pracy w dni robocze | |
| 0 8 * * 1-5 | Dni robocze o 08:00 | |
| 0 10 * * 6,0 | Sobota i niedziela o 10:00 | |
| 30 7 * * MON | Poniedziałek o 07:30 | |
| 0 0 1 * * | O północy pierwszego każdego miesiąca | |
| 0 0 28-31 * * | Każdego dnia w ostatniej części miesiącaStandardowy cron nie zna "ostatniego dnia miesiąca". To uruchamia się aż cztery razy; zwyczajne rozwiązanie to skrypt który sprawdza datę i natychmiast kończy. | |
| 0 0 1 1,4,7,10 * | O północy pierwszego dnia każdego kwartału | |
| 0 0 1 1 * | Raz w roku, na starcie 1 stycznia |
Rozszerzenia których ta strona nie przyjmuje
6Dodają je Quartz, Jenkins i niektóre harmonogramy chmury. Są wymienione żeby je rozpoznać w cudzym crontabie — parser tu każde z nich odrzuca, tak jak cron wysyłany z Linuxem.
| Wyrażenie | Zakres | Znaczenie |
|---|---|---|
| ? | "Żadna konkretna wartość" w polu dnia które inne już ogranicza | |
| L | Ostatni dzień miesiąca albo ostatni dany dzień tygodnia | |
| 15W | Dzień roboczy najbliższy 15 | |
| FRI#3 | Trzeci piątek miesiąca | |
| */30 * * * * * | Szóste pole dla sekund, na przodzieSześć pól, nie pięć. Quartz i kilka bibliotek tego używa; plik crontab nie. | |
| @reboot | Uruchom raz gdy maszyna się startujeRzeczywiste w crontabie ale to nie harmonogram — nie ma następnego uruchomienia do obliczenia, dlatego parser tu to odrzuca. |