fixmint
DA

Sådan læser du et cron-udtryk, felt for felt

Af · · 5 min. læsning

Et cron-udtryk er en kort tekstlinje, der fortæller en planlægger, hvornår et job skal køre. Den almindelige form har fem felter adskilt af mellemrum: minut, time, dag i måneden, måned og ugedag. Linjen 0 9 * * 1-5 betyder kl. 09:00 mandag til fredag. Hvert felt er et tal, et navn, en liste, et interval eller et trin, eller * for alle værdier, og et job kører på hvert tidspunkt, hvor alle felterne passer.

Cron-forklaringCron kører på forkert tidspunktPrøv gratis

De fem felter

FeltTilladte værdierEksempel
Minut0 til 5930 er minut 30 i timen
Time0 til 239 er 09:00, på et 24-timers ur
Dag i måneden1 til 3115 er den 15.
Måned1 til 12, eller JAN til DEC3 eller MAR er marts
Ugedag0 til 6, eller SUN til SAT0 eller SUN er søndag, 1 er mandag

Nogle systemer accepterer også 7 for søndag, men ikke alle, så brug 0 eller SUN. Cron har i denne form intet sekundfelt, så det mindste trin er et minut.

Lister, intervaller, trin og navne

  • betyder alle værdier i feltet. * * * * kører hvert minut.
  • En liste bruger kommaer. 0 9,17 * * * kører kl. 09:00 og kl. 17:00 hver dag.
  • Et interval bruger en bindestreg. 1-5 i ugedagsfeltet betyder mandag til fredag.
  • Et trin bruger en skråstreg. */15 i minutfeltet betyder 0, 15, 30 og 45. 10-30/5 betyder 10, 15, 20, 25 og 30.
  • Navne som MON-FRI kan erstatte tal. De er nemmere at læse, hvis din planlægger accepterer dem.

Delene kan kombineres. 0 8-18/2 * * * kører på minut 0 hver anden time fra kl. 08:00 til 18:00.

Almindelige skemaer

UdtrykBetydning
* * * * *Hvert minut
/15 * * *Hvert 15. minut
0 * * * *På minut 0 i hver time
0 2 * * *Hver dag kl. 02:00
0 9 * * 1-509:00, mandag til fredag
0 9,17 * * *09:00 og 17:00 hver dag
30 6 1 * *06:30 den 1. i hver måned
0 0 * * 0Midnat hver søndag
0 0 1 1 *Midnat den 1. januar
/5 9-17 * 1-5Hvert 5. minut fra 09:00 til 17:55, mandag til fredag

Bemærk, at 0 0 * * er midnat, og 0 12 * * er middag. At få timen forkert er en af de mest almindelige fejl.

Dag i måneden og ugedag

Når både feltet for dag i måneden og feltet for ugedag er begrænset, kører jobbet, når enten det ene eller det andet passer. Det er den klassiske regel i Vixie cron og mange systemer, der er afledt af den. Så 0 0 13 * 5 kører midnat den 13. i hver måned og også hver fredag. Folk forventer ofte kun fredag den 13., og får flere kørsler, end de havde planlagt.

Hvis et af de to felter er *, tæller kun det andet felt. For at køre fredag den 13. skal du planlægge et job for hver fredag og kontrollere datoen i scriptet. Andre planlæggere, herunder nogle cloud-tjenester, kan bruge andre regler, så læs deres dokumentation.

Tidszoner og sommertid

Cron kører efter uret på den maskine eller tjeneste, den kører på, og det er normalt maskinens lokale tidszone. Et job sat til 02:30 kører kl. 02:30 på det ur. Tjek zonen først (på Linux viser date den). Hvis du vil have, at jobs følger ét ur overalt, kører mange teams servere i UTC, og nogle planlæggere lader dig vælge en tidszone for hvert job.

Sommertid ændrer uret to gange om året. Om foråret springer mange steder fra kl. 02:00 direkte til 03:00, så et job kl. 02:30 har ingen tid til at køre. Om efteråret sker timen fra 01:00 til 01:59 to gange. Planlæggere håndterer disse tilfælde forskelligt. Nogle springer jobbet over, nogle kører det én gang, og nogle kører det to gange. Hold jobs uden for vinduet for omstillingen tidligt om morgenen, eller brug UTC, hvis forskellen betyder noget for dig.

Seks felter og Quartz

Nogle planlæggere tilføjer et sekundfelt først, så /10 * * * * kører hvert 10. sekund. Quartz-planlæggeren til Java bruger sekunder, minutter, timer, dag i måneden, måned, ugedag og et valgfrit år, og den tilføjer fire specialtegn:

  • ? betyder "ingen bestemt værdi". Quartz kræver det i enten feltet for dag i måneden eller feltet for ugedag, alt efter hvilket du ikke sætter.
  • L betyder sidste. L i feltet for dag i måneden er månedens sidste dag, og 6L i ugedagsfeltet er den sidste fredag.
  • W betyder nærmeste hverdag. 15W er den hverdag, der ligger tættest på den 15., og den springer ikke over i en anden måned.
  • # betyder den n.te ugedag. 6#3 er den tredje fredag.

Quartz nummererer ugedagene anderledes end den femfeltede form. Dens 1 er søndag, og 7 er lørdag, så mandag til fredag er 2-6, ikke 1-5. Kontrollér altid, hvilket format din planlægger bruger, før du kopierer en linje.

Almindelige fejl

  • */7 i minutfeltet. Værdierne er 0, 7, 14 og så videre op til 56. Den næste ville være 63, som ikke findes, så kørslen efter 56 sker på minut 0 i den næste time. Mellemrummet er kun fire minutter, og afstanden er ujævn. Brug et trin, der går jævnt op i 60, såsom 5, 10, 15 eller 30.
  • 30. februar. En sådan dato findes ikke, så 0 0 30 2 * kører aldrig. Det samme gælder den 31. i en måned med 30 dage. Efter reglen om enten-eller kan en begrænsning af ugedag stadig få kørsler til at ske på andre dage, så kontrollér resultatet.
  • Time 24 eller minut 60. Disse er uden for det tilladte interval. De fleste planlæggere afviser dem, når du gemmer, men ikke alle.
  • At forvente sekunder. En femfeltet linje kører kun på hele minutter.
  • At blande cron sammen med regulære udtryk. I cron betyder alle værdier. I et regulært udtryk betyder at gentage elementet før det. Brug regex-testeren til mønstre, og hold cron-linjer adskilt fra dem.

Tjek de næste kørsler

Før du stoler på et skema, så læs linjen i almindelige ord, og lav en liste over de næste par kørselstidspunkter. Cron-forklaringen gør begge dele, og det er den hurtigste måde at opdage reglen om enten-eller eller et mærkeligt trin.

Hurtige svar

Er det første felt minutter eller sekunder?

Minutter, i den almindelige femfeltede form. Kun nogle seksfeltede planlæggere tilføjer sekunder, og de placerer dem først.

Hvorfor kører mit job om fredagen og også den 13.?

Feltet for dag i måneden og feltet for ugedag er begge sat, så jobbet kører, når det ene af dem passer. Sæt det ene felt til *, hvis du kun vil have det andet.

Bruger cron UTC?

Kun hvis maskinen eller tjenesten er sat til UTC. Ellers bruger den den lokale tidszone på systemet.

Oversat fra Engelsk original med AI-hjælp.

Kommentarer

    Ingen kommentarer endnu. Vær den første.

    Din bedømmelse (valgfri)

    Din e-mail vises eller gemmes aldrig.

    Forside til Agentic AI in the BrowserAgentic AI in the Browser

    Brugsscenarier for privatlivsfokuserede AI-workflows, der kører i browseren: den samme idé om at gøre tingene på din egen enhed, som fixmint er bygget på.

    $4.99Køb på GumroadPå engelsk