fixmint
SV

Så läser du ett cron-uttryck, fält för fält

Av · · 5 min läsning

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.

Cron-förklarareCron körs vid fel tidGör det gratis

De fem fälten

FältTillåtna värdenExempel
Minut0 till 5930 är minut 30 i timmen
Timme0 till 239 är 09:00, på 24-timmarsklocka
Dag i månaden1 till 3115 är den 15:e
Månad1 till 12, eller JAN till DEC3 eller MAR är mars
Veckodag0 till 6, eller SUN till SAT0 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-5 i veckodagsfältet betyder måndag till fredag.
  • Ett steg använder snedstreck. */15 i minutfältet betyder 0, 15, 30 och 45. 10-30/5 betyder 10, 15, 20, 25 och 30.
  • Namn som MON-FRI kan 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

UttryckBetydelse
* * * * *Varje minut
/15 * * *Var 15:e minut
0 * * * *Vid minut 0 varje timme
0 2 * * *Varje dag kl. 02:00
0 9 * * 1-509: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 * * 0Midnatt varje söndag
0 0 1 1 *Midnatt den 1 januari
/5 9-17 * 1-5Var 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.
  • L betyder sista. L i fältet för dag i månaden är månadens sista dag, och 6L i fältet för veckodag är sista fredagen.
  • W betyder 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

  • */7 i 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 betyder att 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.

    Ditt betyg (valfritt)

    Din e-post visas eller sparas aldrig.

    Omslag till Agentic AI in the BrowserAgentic AI in the Browser

    Användningsfall för integritetsfokuserade AI-arbetsflöden som körs direkt i webbläsaren: samma idé om att göra jobbet på din egen enhet som fixmint bygger på.

    $4.99Köp på GumroadPå engelska