Tools Blog

Understanding Cron Expressions: A Practical Guide to Task Automation

Cron Job Automation

Hvis du noen gang har administrert en Linux-server, jobbet med backend-utvikling eller satt opp automatiserte skyfunksjoner, har du sannsynligvis støtt på en streng som ser omtrent slik ut: 0 2 * * *. For de uinnvidde ser det ut som en skrivefeil igjen på tastaturet. For systemadministratorer er det hjerterytmen til moderne infrastrukturautomatisering: et Cron-uttrykk.

Cron er den usynlige motoren som kjører internett. Det sikrer at databasen din sikkerhetskopieres klokken 03:00, den utløser e-postene du mottar hver mandag morgen, og den rydder ut midlertidige serverfiler før de krasjer systemet. Men til tross for sin kraft, er syntaksen notorisk vanskelig for mennesker å analysere. I dette dypdykket vil vi avmystifisere stjernene og lære deg hvordan du leser og skriver cron-planer som en erfaren DevOps-ingeniør.

Hva er Cron and the Crontab?

Cron er en tidsbasert jobbplanlegger som finnes i Unix-lignende datamaskinoperativsystemer. Navnet "cron" kommer fra det greske ordet for tid, chronos. Brukere som setter opp og vedlikeholder programvaremiljøer, bruker cron til å planlegge jobber (kommandoer eller shell-skript) som skal kjøres med jevne mellomrom til faste tider, datoer eller intervaller.

Crontab (Cron Table) er konfigurasjonsfilen der disse tidsplanene er lagret. Når du redigerer crontab via terminalen, skriver du en liste med instruksjoner som forteller serveren nøyaktig hva som skal utføres og når.

Dekonstruerer de 5 stjernene

Et standard cron-uttrykk består av 5 felter atskilt med mellomrom. Hvert felt representerer en bestemt tidsenhet, og de leses alltid fra venstre til høyre i denne nøyaktige rekkefølgen:

* * * * *  command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

En stjerne (*) betyr "alle mulige verdier for dette feltet". Så uttrykket * * * * * oversettes bokstavelig talt til: "Kjør hvert minutt, hver time, hver dag, hver måned, hver dag i uken."

Syntaksmodifikatorer: trinn, områder og lister

Kraften til cron kommer fra modifikatorene. Du er ikke begrenset til bare spesifikke tall eller "alt".

1. Trinnmodifikatoren (/)

Hvis du vil at et skript skal kjøres hvert 15. minutt, bruker du et trinn. */15 * * * * betyr "hvert minutt som er delelig med 15". Den vil kjøre klokken 0, 15, 30 og 45 etter timen.

2. Områdemodifikatoren (-)

Hvis du bare vil at et skript skal kjøre i arbeidstiden, bruker du en rekkevidde. 0 9-17 * * * betyr "kjør på minutt null, hver time fra 09.00 til 17.00".

3. Listemodifikatoren (,)

Hvis du vil at noe skal kjøre på bestemte, ikke-sekvensielle dager, bruk en liste. 0 0 1,15 * * betyr "løp ved midnatt den 1. og 15. i måneden".

Slutt å gjette Cron-uttrykk

Ikke risiker å kjøre et sikkerhetskopiskript hvert minutt i stedet for hver måned. En enkelt skrivefeil kan krasje en produksjonsserver. Bruk vår interaktive visuelle generator for å bygge og validere cron-strenger trygt.

Åpne Cron Job Generator

Den farligste Cron-feilen

Den vanligste og mest katastrofale feilen utviklere gjør er å forvirre "Minute"-feltet. La oss se på et scenario der du vil kjøre et databaseoppryddingsskript en gang i timen kl. 02.00.

Feilen: * 2 * * *

Hvis du skriver ovenstående, ber du serveren kjøre skriptet "Hvert minutt, i løpet av den 2. timen av dagen". Det tunge databaseoppryddingsskriptet ditt vil utløses 60 ganger på rad, sannsynligvis overbelaste CPU-en din, låse databasetabeller og forårsake et massivt strømbrudd.

Riktig måte: 0 2 * * *

Dette forteller eksplisitt at serveren kun skal kjøre på "minutt null, av den andre timen". Den kjøres nøyaktig én gang klokken 02.00.

Ofte stilte spørsmål (FAQ)

Tar cron hensyn til tidssoner?

Som standard evaluerer cron uttrykk basert på den lokale systemtiden til serveren den kjører på. Hvis serveren din er vert i en AWS-region i London, kjører den på UTC/GMT. Du må ta hensyn til tidssoneforskjeller hvis brukerne dine er i New York eller Tokyo.

Kan jeg planlegge en cron-jobb som skal kjøres hvert sekund?

Nei. Standard Unix cron er begrenset til en oppløsning på ett minutt. Hvis du trenger planlegging av underminutt (f.eks. hvert 10. sekund), må du bruke et eget demonverktøy, eller skrive et skript som kjører hvert minutt, men går i løkker internt med dvalekommandoer.

Hva betyr strenger som @daily eller @hourly?

Mange moderne implementeringer av cron støtter ikke-standard forhåndsdefinerte makroer for å gjøre planlegging enklere. @daily er nøyaktig det samme som 0 0 * * * (midnatt hver dag). @hourly er det samme som 0 * * * *. Selv om de er nyttige, støttes de ikke universelt på tvers av alle eldre systemer.