Sådan læser du et cron-udtryk, felt for felt
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.
De fem felter
| Felt | Tilladte værdier | Eksempel |
|---|---|---|
| Minut | 0 til 59 | 30 er minut 30 i timen |
| Time | 0 til 23 | 9 er 09:00, på et 24-timers ur |
| Dag i måneden | 1 til 31 | 15 er den 15. |
| Måned | 1 til 12, eller JAN til DEC | 3 eller MAR er marts |
| Ugedag | 0 til 6, eller SUN til SAT | 0 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-5i ugedagsfeltet betyder mandag til fredag. - Et trin bruger en skråstreg.
*/15i minutfeltet betyder 0, 15, 30 og 45.10-30/5betyder 10, 15, 20, 25 og 30. - Navne som
MON-FRIkan 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
| Udtryk | Betydning |
|---|---|
* * * * * | Hvert minut |
/15 * * * | Hvert 15. minut |
0 * * * * | På minut 0 i hver time |
0 2 * * * | Hver dag kl. 02:00 |
0 9 * * 1-5 | 09: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 * * 0 | Midnat hver søndag |
0 0 1 1 * | Midnat den 1. januar |
/5 9-17 * 1-5 | Hvert 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.Lbetyder sidste.Li feltet for dag i måneden er månedens sidste dag, og6Li ugedagsfeltet er den sidste fredag.Wbetyder nærmeste hverdag.15Wer 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#3er 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
*/7i 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 betyderat 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.


