Cronuttryck
Verktyget går åt båda hållen: skriv ett schema i crontab-format och få det förklarat, eller beskriv schemat med ord och få uttrycket.
Fem fält: minut, timme, dag i månaden, månad och veckodag. Ett sjätte fält för sekunder kan stå först.
Exempel
Betyder
Var 15:e minut från 5 till 59, under timme 9–17, på måndag–fredag
Fält för fält
| Fält | Uttryck | Värden |
|---|---|---|
| Minut | 5-59/15 | 5, 20, 35, 50 |
| Timme | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Dag i månaden | * | alla |
| Månad | * | alla |
| Veckodag | MON-FRI | måndag, tisdag, onsdag, torsdag, fredag |
Nästa körningar
…
Sommartid räknas som i Vixie cron och cronie: ett fast klockslag körs en gång även om timmen hoppas över eller upprepas, medan jobb med * i minut eller timme följer den nya klockan.
Så fungerar det
Ett cronuttryck har fem fält åtskilda av blanksteg: minut (0–59), timme (0–23), dag i månaden (1–31), månad (1–12) och veckodag (0–7, där både 0 och 7 är söndag). Cron kontrollerar varje minut om klockan stämmer med alla fälten och startar i så fall jobbet.
I varje fält betyder * alla värden, 1-5 ett intervall, 1,15 en lista och */15 var femtonde värde. Steg går också att kombinera med intervall: 5-59/15 ger minut 5, 20, 35 och 50. Månader och veckodagar kan skrivas med engelska förkortningar, JAN–DEC och SUN–SAT.
När både dag i månaden och veckodag är begränsade räcker det att en av dem stämmer. 0 0 13 * 5 körs alltså den 13:e varje månad och varje fredag, inte bara på fredagen den 13:e. Regeln kommer från Vixie cron och gäller i de flesta Linuxsystem. Börjar något av fälten med *, även med ett steg som */2, måste båda stämma.
Makrona @hourly, @daily, @weekly, @monthly och @yearly (eller @annually) är kortformer för vanliga scheman, och @reboot kör jobbet en gång när cron startar. Ett sjätte fält för sekunder först, ? för ”vilken dag som helst” och L för månadens sista dag kommer från bl.a. Quartz och Spring och förstås inte av vanlig crontab.
Cron följer datorns lokala tid. När sommartiden börjar och klockan hoppar från 02.00 till 03.00 körs ett jobb med fast klockslag i den överhoppade timmen direkt efter omställningen, och när klockan ställs tillbaka körs det bara en gång. Jobb med * i minut- eller timfältet följer i stället den nya klockan. Listan här räknar på samma sätt, i din tidszon eller i UTC.
Kontrollera vilken implementation som kör schemat. Molntjänster har ofta egna varianter: AWS EventBridge har t.ex. sex fält med år sist och kräver ? i antingen dag i månaden eller veckodag, och många tjänster räknar i UTC i stället för lokal tid.
Åt andra hållet går det att beskriva schemat med ord i stället: ”varje måndag kl. 9”, ”var 15:e minut”, ”första dagen i månaden 02.30”, ”varje vardag mellan 9 och 17” eller ”sista dagen i månaden midnatt”. Klockslag läses som 9, 9.30, 9:30 och 09h30, intervall som 9–17 och listor som 1, 15. Förstås frasen visas uttrycket direkt, och förklaringen ovanför säger med ord vad uttrycket betyder, så att du kan se om det blev det du menade. Förstås den inte sägs det vilka ord som inte gick att läsa, i stället för att något gissas fram.
Byggaren under textrutan ger samma sak med val i stället för ord, och de två följs åt: en fras fyller i kontrollerna, och varje ändring i kontrollerna skriver om uttrycket. Allt går inte att uttrycka i cron. Det finns inget sätt att säga ”första måndagen i månaden” eller ”varannan vecka” i vanlig crontab, och två olika klockslag i samma fras (kl. 9 och 17) skrivs som en lista i timfältet: 0 9,17 * * *.