Slik leser du et cron-uttrykk felt for felt
Et cron-uttrykk er en kort tekstlinje som forteller en planlegger når en jobb skal kjøres. Den vanlige formen har fem felt atskilt med mellomrom: minutt, time, dag i måneden, måned og ukedag. Linjen 0 9 * * 1-5 betyr kl. 09.00 fra mandag til fredag. Hvert felt er et tall, et navn, en liste, et intervall eller et steg, eller * for alle verdier, og en jobb kjøres på hvert tidspunkt der alle feltene stemmer.
De fem feltene
| Felt | Tillatte verdier | Eksempel |
|---|---|---|
| Minutt | 0 til 59 | 30 er minutt 30 i timen |
| Time | 0 til 23 | 9 er 09.00, på et 24-timers klokkeslett |
| Dag i måneden | 1 til 31 | 15 er den 15. |
| Måned | 1 til 12, eller JAN til DES | 3 eller MAR er mars |
| Ukedag | 0 til 6, eller SUN til LØR | 0 eller SUN er søndag, 1 er mandag |
Noen systemer godtar også 7 for søndag, men ikke alle, så bruk 0 eller SUN. Cron har ikke et sekundfelt i denne formen, så det minste steget er ett minutt.
Lister, intervaller, steg og navn
betyr alle verdier i feltet.* * * *kjøres hvert minutt.- En liste bruker komma.
0 9,17 * * *kjøres kl. 09.00 og kl. 17.00 hver dag. - Et intervall bruker bindestrek.
1-5i ukedagsfeltet betyr mandag til fredag. - Et steg bruker skråstrek.
*/15i minuttfeltet betyr 0, 15, 30 og 45.10-30/5betyr 10, 15, 20, 25 og 30. - Navn som
MON-FRIkan erstatte tall. De er lettere å lese, hvis planleggeren din godtar dem.
Disse delene kan kombineres. 0 8-18/2 * * * kjøres på minutt 0 hver annen time fra kl. 08.00 til kl. 18.00.
Vanlige tidsplaner
| Uttrykk | Betydning |
|---|---|
* * * * * | Hvert minutt |
/15 * * * | Hvert 15. minutt |
0 * * * * | På minutt 0 hver time |
0 2 * * * | Hver dag kl. 02.00 |
0 9 * * 1-5 | Kl. 09.00, mandag til fredag |
0 9,17 * * * | Kl. 09.00 og kl. 17.00 hver dag |
30 6 1 * * | Kl. 06.30 den 1. i hver måned |
0 0 * * 0 | Midnatt hver søndag |
0 0 1 1 * | Midnatt 1. januar |
/5 9-17 * 1-5 | Hvert 5. minutt fra kl. 09.00 til kl. 17.55, mandag til fredag |
Merk at 0 0 * * er midnatt, og 0 12 * * er middag. Å få timen feil er en av de vanligste feilene.
Dag i måneden og ukedag
Når både feltet for dag i måneden og feltet for ukedag er begrenset, kjøres jobben når enten den ene eller den andre stemmer. Dette er den klassiske regelen i Vixie cron og mange systemer som er avledet fra den. Så 0 0 13 * 5 kjøres midnatt den 13. i hver måned, og også hver fredag. Folk forventer ofte bare fredag den 13., og får flere kjøringer enn de planla.
Hvis ett av de to feltene er *, er det bare det andre feltet som teller. For å kjøre på fredag den 13., legg inn en jobb for hver fredag og sjekk datoen inne i skriptet. Andre planleggere, inkludert noen skytjenester, kan bruke andre regler, så les dokumentasjonen deres.
Tidssoner og sommertid
Cron kjører etter klokken på maskinen eller tjenesten den kjører på, som normalt er den lokale tidssonen til maskinen. En jobb satt til kl. 02.30 kjøres kl. 02.30 på den klokken. Sjekk sonen først (på Linux viser date den). Hvis du vil at jobber skal følge én klokke overalt, kjører mange team servere i UTC, og noen planleggere lar deg sette en tidssone for hver jobb.
Sommertid endrer klokken to ganger i året. Om våren hopper mange steder fra kl. 02.00 rett til kl. 03.00, så en jobb kl. 02.30 har ingen tid å kjøres i. Om høsten skjer timen fra kl. 01.00 til kl. 01.59 to ganger. Planleggere håndterer disse tilfellene ulikt. Noen hopper over jobben, noen kjører den én gang, og noen kjører den to ganger. Hold jobber utenfor skiftevinduet tidlig på morgenen, eller bruk UTC, hvis forskjellen betyr noe for deg.
Seks felt og Quartz
Noen planleggere legger til et sekundfelt først, så /10 * * * * kjøres hvert 10. sekund. Quartz-planleggeren for Java bruker sekunder, minutter, timer, dag i måneden, måned, ukedag og et valgfritt år, og den legger til fire spesialtegn:
?betyr «ingen bestemt verdi». Quartz krever det i enten feltet for dag i måneden eller ukedag, avhengig av hvilket du ikke setter.Lbetyr siste.Li feltet for dag i måneden er siste dag i måneden, og6Li ukedagsfeltet er siste fredag.Wbetyr nærmeste ukedag.15Wer ukedagen nærmest den 15., og den hopper ikke over til en annen måned.#betyr den n-te ukedagen.6#3er tredje fredag.
Quartz nummererer dagene annerledes enn i den femfelts formen. Her er 1 søndag og 7 lørdag, så mandag til fredag er 2-6, ikke 1-5. Sjekk alltid hvilket format planleggeren din bruker før du kopierer en linje.
Vanlige feil
*/7i minuttfeltet. Verdiene er 0, 7, 14 og så videre opp til 56. Den neste ville vært 63, som ikke finnes, så kjøringen etter 56 skjer på minutt 0 i neste time. Avstanden er bare fire minutter, og intervallene blir ujevne. Bruk et steg som går jevnt opp i 60, for eksempel 5, 10, 15 eller 30.- 30. februar. En slik dato finnes ikke, så
0 0 30 2 *kjøres aldri. Det samme gjelder den 31. i en måned med 30 dager. Under ELLER-regelen kan en begrensning på ukedag fortsatt få jobben til å kjøre på andre dager, så sjekk resultatet. - Time 24 eller minutt 60. Dette er utenfor gyldig område. De fleste planleggere avviser dem når du lagrer, men ikke alle.
- Forventer sekunder. En linje med fem felt kjøres bare på hele minutter.
- Å forveksle cron med regulære uttrykk. I cron betyr
alle verdier. I et regulært uttrykk betyrå gjenta elementet foran. Bruk regex-testeren til mønstre, og hold cron-linjer adskilt.
Sjekk de neste kjøringene
Før du stoler på en tidsplan, les linjen i vanlige ord, og list opp de neste kjøretidspunktene. Cron-forklareren gjør begge deler, og det er den raskeste måten å fange OR-regelen eller et merkelig steg.
Raske svar
Er det første feltet minutter eller sekunder?
Minutter, i standard femfelts form. Bare noen seksfelts planleggere legger til sekunder, og de setter dem først.
Hvorfor kjøres jobben min på fredager og også den 13.?
Feltene for dag i måneden og ukedag er begge satt, så jobben kjøres når en av dem stemmer. Sett ett av feltene til * hvis du bare vil ha det andre.
Bruker cron UTC?
Bare hvis maskinen eller tjenesten er satt til UTC. Ellers bruker den den lokale tidssonen til systemet.
Oversatt fra Engelsk original med KI-hjelp.
Kommentarer
Ingen kommentarer ennå. Bli den første.


