Cron-udtryk forklaret: Planlæg alt automatisk
Du skal køre en databasesikkerhedskopi hver nat kl. 3. Eller sende en rapport hver mandag morgen. Eller rydde en cache hvert 15. minut. På Linux- og Unix-servere er værktøjet til dette cron, og måden du fortæller cron hvornår noget skal køre, er med et cron-udtryk.
Cron-udtryk kan virke skræmmende ved første øjekast. 0 3 * * * eller */15 9-17 * * 1-5 kan se ud som vrøvl, hvis du ikke kender mønsteret. Men syntaksen er overraskende enkel, når du forstår de fem felter.
De fem felter
Hvert standard cron-udtryk har præcis fem felter, adskilt af mellemrum. Hvert felt repræsenterer en tidsenhed:
┌───────────── minut (0-59)
│ ┌───────────── time (0-23)
│ │ ┌───────────── dag i måneden (1-31)
│ │ │ ┌───────────── måned (1-12)
│ │ │ │ ┌───────────── ugedag (0-7, hvor 0 og 7 er søndag)
│ │ │ │ │
* * * * *
Det er det hele. Fem felter fra venstre mod højre: minut, time, dag i måneden, måned, ugedag.
Vidste du? Navnet "cron" kommer fra det græske ord "chronos", der betyder tid. Cron-dæmonen (baggrundsprocessen) har været en central del af Unix-lignende operativsystemer siden 1975.
Specialtegnene
Asterisk (*) — Alle værdier
En asterisk betyder "alle mulige værdier" for det pågældende felt.
* * * * * = hvert minut af hver time af hver dag.
Komma (,) — Flere værdier
Et komma adskiller individuelle værdier.
0 9,12,18 * * * = ved minut 0 i timerne 9, 12 og 18 (kl. 9.00, 12.00 og 18.00).
Bindestreg (-) — Interval af værdier
En bindestreg definerer et interval.
0 9-17 * * * = ved minut 0 i hver time fra 9 til 17 (kl. 9.00 til 17.00, hver time).
Skråstreg (/) — Trin-værdier
En skråstreg definerer intervaller.
*/15 * * * * = hvert 15. minut (minut 0, 15, 30, 45 i hver time).
0 */2 * * * = hver 2. time ved minut 0 (midnat, kl. 2, kl. 4, ...).
Læs cron-udtryk: Øvelse
Lad os gennemgå typiske eksempler. For hvert eksempel læses de fem felter fra venstre mod højre.
0 3 * * * — Dagligt kl. 3.00
| Felt | Værdi | Betydning |
|---|---|---|
| Minut | 0 | Ved minut 0 |
| Time | 3 | I time 3 (kl. 3 om natten) |
| Dag i måneden | * | Hver dag |
| Måned | * | Hver måned |
| Ugedag | * | Hver ugedag |
Oversættelse: "Kl. 3.00 hver dag." Det klassiske valg til natlige sikkerhedskopier.
*/15 * * * * — Hvert 15. minut
| Felt | Værdi | Betydning |
|---|---|---|
| Minut | */15 | Hvert 15. minut |
| Time | * | Hver time |
| Dag i måneden | * | Hver dag |
| Måned | * | Hver måned |
| Ugedag | * | Alle dage |
Oversættelse: "Hvert 15. minut hele døgnet." Typisk til health checks og cache-opdateringer.
0 9 * * 1-5 — Hverdage kl. 9.00
| Felt | Værdi | Betydning |
|---|---|---|
| Minut | 0 | Ved minut 0 |
| Time | 9 | I time 9 |
| Dag i måneden | * | Hver dag |
| Måned | * | Hver måned |
| Ugedag | 1-5 | Mandag til fredag |
Oversættelse: "Kl. 9.00, mandag til fredag." Perfekt til daglige arbejdsrapporter.
0 0 1 * * — Første dag i hver måned
| Felt | Værdi | Betydning |
|---|---|---|
| Minut | 0 | Ved minut 0 |
| Time | 0 | I time 0 (midnat) |
| Dag i måneden | 1 | Den 1. |
| Måned | * | Hver måned |
| Ugedag | * | Hvilken som helst ugedag |
Oversættelse: "Ved midnat den første dag i hver måned." Bruges til månedlige rapporter, fakturering eller oprydning.
30 8 * * 1 — Mandag kl. 8.30
| Felt | Værdi | Betydning |
|---|---|---|
| Minut | 30 | Ved minut 30 |
| Time | 8 | I time 8 |
| Dag i måneden | * | Hver dag |
| Måned | * | Hver måned |
| Ugedag | 1 | Mandag |
Oversættelse: "Kl. 8.30 hver mandag." Ideel til ugentlige team-notifikationer.
Skriv dine egne cron-udtryk
Her er en systematisk fremgangsmåde:
- Start med hvornår. "Hver dag kl. 3" eller "hvert 5. minut i arbejdstiden."
- Udfyld felterne fra venstre mod højre. Start med minut, derefter time, dag i måneden, måned og til sidst ugedag.
- Brug
*til "alle". Hvis et felt ikke har betydning, brug*. - Test inden deployment. Verificer altid, at dit udtryk producerer den plan, du forventer.
Hurtig referenceoversigt over almindelige mønstre
| Plan | Udtryk |
|---|---|
| Hvert minut | * * * * * |
| Hvert 5. minut | */5 * * * * |
| Hver time | 0 * * * * |
| Hver dag ved midnat | 0 0 * * * |
| Hver dag kl. 3.00 | 0 3 * * * |
| Hver mandag kl. 9.00 | 0 9 * * 1 |
| Hverdage kl. 8.30 | 30 8 * * 1-5 |
| Den første i måneden | 0 0 1 * * |
| Hvert 15. min i arbejdstiden | */15 9-17 * * 1-5 |
| To gange om dagen (9 og 18) | 0 9,18 * * * |
| Hver søndag kl. 2.00 | 0 2 * * 0 |
Typiske fejl
Glemmer at timer er 0-23
Time 13 er kl. 13.00, ikke kl. 1. En typisk fejl er at skrive 0 1 * * * og tro, det kører kl. 13.00, mens det faktisk kører kl. 1.00.
Forvirring om ugedag
Søndag kan være 0 eller 7 (begge er gyldige). Mandag er 1, lørdag er 6. Nogle forventer, at mandag er 0.
Interaktion mellem dag i måneden og ugedag
Hvis du angiver både dag i måneden og ugedag (ingen af dem er *), kører de fleste cron-implementeringer jobbet, når én af betingelserne er opfyldt, ikke begge. Det overrasker mange.
Advarsel Udtrykket 0 9 15 * 1 betyder IKKE "kl. 9 den 15., men kun hvis det er en mandag". Det betyder "kl. 9 den 15. i hver måned OG kl. 9 hver mandag". Dette er en hyppig kilde til uventet adfærd.
Tidszonebevidsthed
Cron kører i serverens lokale tidszone. Hvis din server er i UTC og du er i København (UTC+1 eller UTC+2 om sommeren), kører et 0 9 * * *-job til en anden tid. Tjek altid din servers tidszone.
Tip Test og visualisér dine cron-udtryk inden deployment: Sådan læser og tester du cron-udtryk. Se de næste køretidspunkter og bekræft, at planen svarer til det, du forventer.
Byg og test dine cron-udtryk:
Gratis, øjeblikkeligt og uden registrering.