Så läser du ett cron-uttryck, fält för fält
Ett cron-uttryck är en kort textrad som talar om för ett schemaläggningsverktyg när ett jobb ska köras. Den vanliga formen har fem fält åtskilda av mellanslag: minut, timme, dag i månaden, månad och veckodag. Raden 0 9 * * 1-5 betyder 09:00 måndag till fredag. Varje fält är ett tal, ett namn, en lista, ett intervall eller ett steg, eller * för alla värden, och ett jobb körs vid varje tidpunkt där alla fälten stämmer.
De fem fälten
| Fält | Tillåtna värden | Exempel |
|---|---|---|
| Minut | 0 till 59 | 30 är minut 30 i timmen |
| Timme | 0 till 23 | 9 är 09:00, på 24-timmarsklocka |
| Dag i månaden | 1 till 31 | 15 är den 15:e |
| Månad | 1 till 12, eller JAN till DEC | 3 eller MAR är mars |
| Veckodag | 0 till 6, eller SUN till SAT | 0 eller SUN är söndag, 1 är måndag |
Vissa system accepterar också 7 för söndag, men inte alla, så använd 0 eller SUN. Cron har inget sekundfält i den här formen, så det minsta steget är en minut.
Listor, intervall, steg och namn
betyder alla värden i fältet.* * * *körs varje minut.- En lista använder kommatecken.
0 9,17 * * *körs kl. 09:00 och 17:00 varje dag. - Ett intervall använder bindestreck.
1-5i veckodagsfältet betyder måndag till fredag. - Ett steg använder snedstreck.
*/15i minutfältet betyder 0, 15, 30 och 45.10-30/5betyder 10, 15, 20, 25 och 30. - Namn som
MON-FRIkan ersätta siffror. De är lättare att läsa, om ditt schemaläggningsverktyg accepterar dem.
Delarna kan kombineras. 0 8-18/2 * * * körs vid minut 0 var andra timme från 08:00 till 18:00.
Vanliga scheman
| Uttryck | Betydelse |
|---|---|
* * * * * | Varje minut |
/15 * * * | Var 15:e minut |
0 * * * * | Vid minut 0 varje timme |
0 2 * * * | Varje dag kl. 02:00 |
0 9 * * 1-5 | 09:00, måndag till fredag |
0 9,17 * * * | 09:00 och 17:00 varje dag |
30 6 1 * * | 06:30 den 1:a varje månad |
0 0 * * 0 | Midnatt varje söndag |
0 0 1 1 * | Midnatt den 1 januari |
/5 9-17 * 1-5 | Var 5:e minut från 09:00 till 17:55, måndag till fredag |
Observera att 0 0 * * är midnatt och 0 12 * * är middag. Fel timme är ett av de vanligaste misstagen.
Dag i månaden och veckodag
När både fältet för dag i månaden och fältet för veckodag är begränsade körs jobbet när endera av dem stämmer. Det här är den klassiska regeln i Vixie cron och i många system som bygger på den. 0 0 13 * 5 körs alltså vid midnatt den 13:e varje månad och dessutom varje fredag. Folk tror ofta att det bara gäller fredagen den 13:e, och får fler körningar än de tänkt sig.
Om något av de två fälten är * räknas bara det andra. För att köra på fredagen den 13:e, schemalägg ett jobb för varje fredag och kontrollera datumet i skriptet. Andra schemaläggningsverktyg, inklusive vissa molntjänster, kan använda andra regler, så läs deras dokumentation.
Tidszoner och sommartid
Cron går efter klockan i maskinen eller tjänsten den körs på, vilket normalt är maskinens lokala tidszon. Ett jobb som är satt till 02:30 körs kl. 02:30 på den klockan. Kontrollera tidszonen först (på Linux visar date den). Om du vill att jobben ska följa samma klocka överallt kör många team servrarna i UTC, och vissa schemaläggningsverktyg låter dig ange en tidszon för varje jobb.
Sommartiden ändrar klockan två gånger om året. På våren hoppar många platser direkt från 02:00 till 03:00, så ett jobb kl. 02:30 får ingen tid att köras. På hösten inträffar timmen från 01:00 till 01:59 två gånger. Schemaläggningsverktyg hanterar de här fallen olika. Vissa hoppar över jobbet, vissa kör det en gång och vissa kör det två gånger. Håll jobb utanför det tidiga morgonfönstret för klockbytet, eller använd UTC, om skillnaden spelar roll för dig.
Sex fält och Quartz
Vissa schemaläggningsverktyg lägger till ett sekundfält först, så /10 * * * * körs var 10:e sekund. Quartz-schemaläggaren för Java använder sekunder, minuter, timmar, dag i månaden, månad, veckodag och ett valfritt år, och den lägger till fyra specialtecken:
?betyder ”inget specifikt värde”. Quartz kräver det i antingen fältet för dag i månaden eller fältet för veckodag, beroende på vilket du inte anger.Lbetyder sista.Li fältet för dag i månaden är månadens sista dag, och6Li fältet för veckodag är sista fredagen.Wbetyder närmaste vardag.15Wär vardagen närmast den 15:e, och den hoppar inte in i en annan månad.#betyder n:te veckodagen.6#3är tredje fredagen.
Quartz numrerar dagarna annorlunda än formen med fem fält. Dess 1 är söndag och 7 är lördag, så måndag till fredag är 2-6, inte 1-5. Kontrollera alltid vilket format ditt schemaläggningsverktyg använder innan du kopierar en rad.
Vanliga misstag
*/7i minutfältet. Värdena är 0, 7, 14 och så vidare upp till 56. Nästa skulle vara 63, vilket inte finns, så körningen efter 56 sker vid minut 0 nästa timme. Glappet är bara fyra minuter, och avstånden blir ojämna. Använd ett steg som delar 60 jämnt, till exempel 5, 10, 15 eller 30.- 30 februari. Det datumet finns inte, så
0 0 30 2 *körs aldrig. Samma sak gäller den 31:a i en månad som har 30 dagar. Enligt endera-regeln kan en begränsning på veckodag ändå ge körningar på andra dagar, så kontrollera resultatet. - Timme 24 eller minut 60. De ligger utanför intervallet. De flesta schemaläggningsverktyg avvisar dem när du sparar, men inte alla.
- Att förvänta sekunder. En rad med fem fält körs bara vid hela minuter.
- Att blanda ihop cron med reguljära uttryck. I cron betyder
alla värden. I ett reguljärt uttryck betyderatt upprepa objektet före den. Använd Regex-testare för mönster, och håll cron-rader åtskilda.
Kontrollera nästa körningar
Innan du litar på ett schema, läs raden med vanliga ord och lista dess nästa körningstider. Cron-förklararen gör båda, och det är det snabbaste sättet att fånga endera-regeln eller ett märkligt steg.
Snabba svar
Är det första fältet minuter eller sekunder?
Minuter, i standardformen med fem fält. Bara vissa schemaläggningsverktyg med sex fält lägger till sekunder, och de placerar dem först.
Varför körs mitt jobb på fredagar och även den 13:e?
Fälten för dag i månaden och veckodag är båda satta, så jobbet körs när något av dem stämmer. Sätt ett fält till * om du bara vill ha det andra.
Använder cron UTC?
Bara om maskinen eller tjänsten är inställd på UTC. Annars använder den systemets lokala tidszon.
Översatt från Engelsk original med hjälp av AI.
Kommentarer
Inga kommentarer än. Var först.


