Cron-udtryk forklaret
Værktøjet virker begge veje: indtast en tidsplan i crontab-format og få den forklaret, eller beskriv tidsplanen med ord og få udtrykket.
Fem felter: minut, time, dag i måneden, måned og ugedag. Et sjette felt til sekunder kan stå først.
Eksempler
Betyder
Hvert 15. minut fra 5 til 59, i time 9–17, hver mandag–fredag
Felt for felt
| Felt | Udtryk | Værdier |
|---|---|---|
| Minut | 5-59/15 | 5, 20, 35, 50 |
| Time | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Dag i måneden | * | alle |
| Måned | * | alle |
| Ugedag | MON-FRI | mandag, tirsdag, onsdag, torsdag, fredag |
Næste kørsler
…
Sommertid håndteres som i Vixie cron og cronie: Et fast klokkeslæt kører én gang, selv om timen springes over eller gentages, mens job med * i minut eller time følger det nye ur.
Sådan virker det
Et cron-udtryk har fem felter adskilt af mellemrum: minut (0–59), time (0–23), dag i måneden (1–31), måned (1–12) og ugedag (0–7, hvor både 0 og 7 er søndag). Hvert minut kontrollerer cron, om uret passer med alle felterne, og i så fald starter den jobbet.
I hvert felt betyder * alle værdier, 1-5 et interval, 1,15 en liste og */15 hver femtende værdi. Trin kan også kombineres med intervaller: 5-59/15 giver minutterne 5, 20, 35 og 50. Måneder og ugedage kan skrives med engelske forkortelser, JAN–DEC og SUN–SAT.
Når både dag i måneden og ugedag er begrænset, er det nok, at én af dem passer. 0 0 13 * 5 kører derfor den 13. i hver måned og hver fredag, ikke kun fredag den 13. Reglen stammer fra Vixie cron og gælder på de fleste Linux-systemer. Begynder et af felterne med *, også med et trin som */2, skal begge passe.
Makroerne @hourly, @daily, @weekly, @monthly og @yearly (eller @annually) er genveje til almindelige tidsplaner, og @reboot kører jobbet én gang, når cron starter. Et sjette felt til sekunder først, ? for »en hvilken som helst dag« og L for den sidste dag i måneden kommer fra Quartz, Spring og lignende planlæggere, og almindelig crontab forstår dem ikke.
Cron følger computerens lokale tid. Når sommertiden begynder, og uret springer fra 2.00 til 3.00, kører et job med et fast klokkeslæt i den oversprungne time lige efter skiftet, og når uret stilles tilbage, kører det kun én gang. Job med * i minut- eller timefeltet følger i stedet det nye ur. Listen her fungerer på samme måde, i din tidszone eller i UTC.
Tjek, hvilken implementering der kører din tidsplan. Cloudtjenester har ofte deres egne varianter: AWS EventBridge har for eksempel seks felter med året til sidst og kræver ? i enten dag i måneden eller ugedag, og mange tjenester arbejder i UTC i stedet for lokal tid.
Den anden vej kan du i stedet beskrive tidsplanen med ord: »hver mandag kl. 9«, »hvert 15. minut«, »første dag i måneden 2.30«, »hver hverdag mellem 9 og 17« eller »sidste dag i måneden midnat«. Klokkeslæt læses som 9, 9.30, 9:30 og 09h30, intervaller som 9–17 og lister som 1, 15. Forstås sætningen, vises udtrykket med det samme, og forklaringen ovenfor siger med ord, hvad udtrykket betyder, så du kan se, om det blev det, du mente. Forstås den ikke, står der, hvilke ord der ikke kunne læses, i stedet for at noget gættes.
Byggeren under tekstfeltet gør det samme med valg i stedet for ord, og de to følges ad: en sætning udfylder kontrollerne, og hver ændring i kontrollerne skriver udtrykket om. Ikke alt kan udtrykkes i cron. Der er ingen måde at sige »første mandag i måneden« eller »hver anden uge« på i almindelig crontab, og to forskellige klokkeslæt i samme sætning (kl. 9 og 17) skrives som en liste i timefeltet: 0 9,17 * * *.