Beregn de næste eksekveringer af et cron-udtryk

analyserer og viser næste eksekveringsdatoer for cron-konfigurationen

Hvad er et cron udtryk?

Et cron-udtryk er en kort streng, der beskriver en gentagelse over tid. Den format arvet fra Unix indeholder fem felter adskilt af mellemrum: minut, time, dag i måneden, måned og ugedag. Denne syntaks blev født med dæmonen cron af Brian Kernighan i 1970'erne, derefter generaliseret af Vixie cron (1987) understøttet af alle moderne Linux- og macOS-distributioner. I dag er den samme syntaks findes i de fleste skyplanlæggere (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) og CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── minut (0-59)
│ ┌── time (0-23)
│ │ ┌── dag i måneden (1-31)
│ │ │ ┌── måneder (1-12 eller JAN-DEC)
│ │ │ │ ┌── ugedag (0-7 eller SØN-LØR, 0 og 7 = søndag)
│ │ │ │ │
* * * * *

Et velformet cron-udtryk definerer derfor et præcist cron-skema: hvert felt kan være en fast værdi, et interval, en liste, et trin eller en stjerne, der matcher alt. Kompaktheden af crontab-udtrykket er dets styrke, men det er også det, der gør det cron-dekoder er afgørende for visuelt at validere hensigten. Det er hele pointen af denne cron-konverter: lav en læsbar cron-forklaring plus listen over næste henrettelser.

Anatomi af et cron-udtryk

De fem felter deler en fælles grammatik. Her er de grænser, der accepteres af hver kolonne i en Standard crontab udtryk:

  • Minut: 0-59.
  • Tid: 0-23, 24-timers format.
  • Dag i måneden: 1-31.
  • Måned: 1-12 eller de tekstmæssige forkortelser JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
  • Ugedag: 0-7 hvor 0 og 7 begge repræsenterer søndag eller forkortelserne SUN, MON, TUE, WED, THU, FRI, SAT.

Specialkarakterer deles af de fem felter:

  • *: en hvilken som helst værdi, matcher alle tilladte værdier i feltet.
  • ,: diskret liste, f.eks. 1,15,30 i minutfeltet.
  • -: inklusiv område, f.eks. 9-17 for kontortid.
  • /: trin, for eksempel */15 = hver 15. enheder, eller 0-30/5 = hvert 5. minut mellem 0 og 30.

Quartz Extensions (Java, AWS EventBridge, Spring): grammatik stiger til 6 eller 7 felter med en sekunders kolonne forrest (0-59) og nogle gange en kolonne Efterfølgende år (1970-2099). Quartz introducerer også ? (ingen specifik værdi, for at afkoble månedens og ugedagen), L (sidste: sidste dag i måneden, eller sidste fredag med 5L), W (nærmeste hverdag) og # (N. dag i ugen i måneden, f.eks. 2#3 for den 3. mandag). Et udtryk Quartz er generelt ikke kompatibel med en UNIX crontab, og omvendt: dette er det vigtigste fejlkilde ved kopiering af et cron-udtryk fra én platform til en anden.

# UNIX / Vixie cron (5 felter)
0 9 * * 1-5

# Kvarts (6 felter med sekunder)
0 0 9 ? * MAN-FR

# Kvarts (7 felter med årstal)
0 0 9 ? * MAN-FRE 2026

Hvorfor afkode et cron-udtryk?

Det er hurtigt at læse 0 0 * * *. At læse */7 2-5 1,15 * 1-5 er meget mindre. Hvornår et udtryk er ud over det trivielle, risikoen for fortolkningsfejl øges, og cron-afkodningen bliver et revisionsstadium i sig selv.

  • Debug produktion: forstå, hvorfor en opgave blev udløst kl. 03:17 og ikke kl. 03:00, eller identificer et overlap mellem to job.
  • Kodegennemgang: valider, at en planlægger, der er skubbet som en pull-anmodning, gør, hvad den gør hævder forfatteren uden at skulle huske hvert symbols semantik.
  • Scheduler Audit: Gennemgå Linux cron jobs i /etc/crontab og /etc/cron.d/, udløser Jenkins, spec.schedule af Kubernetes CronJob, reglerne AWS EventBridge og GCP Cloud Scheduler job.
  • Ældre migration: Genoptag en historisk /etc/crontab uden dokumentation og genopbygg opgavekortet før en infrastrukturændring.
  • Onboarding: Tillad en ny udvikler at genlæse en crontab uden at skulle lære alle specialtegnene fra den ene dag til den anden.

Sådan bruger du cron-dekoder

Proceduren, der skal følges for at afkode et crontab-udtryk med værktøjet:

  1. Indsæt dit cron-udtryk i inputfeltet (5 felter adskilt af mellemrum).
  2. Angiv antallet af næste henrettelser, der skal beregnes.
  3. Klik på konverter for at starte cron-afkodningen: værktøjet returnerer en menneskelig dom, som forklarer udløsningen, plus den daterede liste over de næste henrettelser.
  4. Tjek visuelt, at datoerne svarer til din hensigt (tid, dag, frekvens).
  5. Kopiér outputtet via kopieringsknappen for at indsætte det i en billet, PR eller dokumentation teknisk.

Værktøjet giver ikke kun syntaktisk parsing: det giver en forklaring cron i naturligt sprog, hvilket gør det både til en cron-dekoder og en tidsplan validator.

Klassiske eksempler på cron udtryk

Mønstrene nedenfor dækker de fleste af de cron-skemaer, man støder på i produktionen. De er alle gyldige på Linux crontab, Kubernetes CronJob, GitHub Actions og størstedelen af ansøgningsplanlæggere.

Udtryk Menneskelig læsning
* * * * * Hvert minut
0 * * * * Hver time skarpt
0 0 * * * Hver dag ved midnat
0 0 * * 0 Hver søndag ved midnat
*/15 * * * * Hvert 15. minut
0 9 * * 1-5 9:00 mandag til fredag
0 0 1 * * Den 1. i hver måned ved midnat
0 0,12 * * * Ved midnat og middag hver dag
*/5 9-17 * * 1-5 Hvert 5. minut i åbningstiden
30 2 1,15 * * Den 1. og 15. i måneden kl. 02:30

For at udføre en cron-opgave på en Linux-server skal du redigere brugerens crontab fra skallen:

# rediger crontab for den aktuelle bruger
$ crontab -e

# liste eksisterende opgaver
$ crontab -l

# eksempel på tilføjet linje: daglig backup kl. 03.00
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Eksempel på cron-konverter-output for */5 * * * *:

2026-05-05 00:00:00
05-05-2026 00:05:00
05-05-2026 00:10:00
05-05-2026 00:15:00
05-05-2026 00:20:00
...

Ofte stillede spørgsmål om cron-dekoder

Hvad er forskellen mellem UNIX cron og Quartz?

UNIX/Vixie cron bruger 5 felter (minut til ugedag), uden præcision til det andet, og har ikke indfødte forestilling om "sidste dag i måneden". Quartz (Java, Spring, AWS EventBridge) tilføjer en kolonne sekunder øverst, nogle gange en år kolonne nederst og flere symboler (?, L, W, #) mangler fra Linux crontab. A cron expression 6-field Quartz er derfor ikke direkte portabel til /etc/crontab og omvendt. Vores cron-dekoder er målrettet mod 5-formatet felter, som dækker størstedelen af planlæggere.

Hvordan kører man et cron-job hvert 5. minut?

Med /-trinnet i minutfeltet:

*/5 * * * * /usr/local/bin/check-health.sh

Dette crontab-udtryk udløser scriptet ved minutter 0, 5, 10, 15... af hver time, hver dag. Tilføj begrænsningerne for at begrænse arbejdstiden fra mandag til fredag i felterne tid og ugedag: */5 9-17 * * 1-5.

Hvad betyder stjernen (*) i et cron-udtryk?

Stjernen betyder en hvilken som helst værdi: den matcher alle autoriserede værdier i feltet. I 0 0 * * *, de tre stjerner betyder "enhver dag i måneden, enhver måned, alle ugens dage. Kombineret med de to første felter sat til 0, har vi får "hver dag ved midnat". Stjernen kan også kombineres med et trin: */15 in minut = hvert 15. minut.

Har Crontab en tidszone?

Standard til serverens tidszone. På en Linux crontab er det systemet TZ (ofte UTC på VPS og containere). GitHub Actions tvinger UTC. Kubernetes CronJob bruger controller tidszone, kan konfigureres via spec.timeZone siden 1.27. AWS EventBridge evaluerer udtryk ved UTC. Applikationsplanlæggere (Symfony Scheduler, Quartz, Airflow) giver dig ofte mulighed for at indstille en tidszone dedikeret til hver opgave. Hvis du er i tvivl, så tjek dato på målserveren og sammenligne med outputtet fra cron-konverteren.

Cron job vs at command: hvilken skal man vælge?

cron bruges til at udføre en tilbagevendende opgave i henhold til en tidsplan. at bruges at udføre en kommando kun én gang på et givet tidspunkt. Til daglig backup, log rotation eller almindeligt API-kald, brug cron. At udskyde en enkelt operation ("genstart denne udrulning kl. 22.00 i aften"), brug på:

$ echo "/usr/local/bin/deploy.sh" | kl. 22.00
Hvordan tester man et cron-udtryk uden at udløse det?

Dette er netop rollen for denne cron-konverter: den beregner det næste N henrettelser fra det aktuelle tidspunkt, uden at starte noget job. Du ser med det samme, om din crontab-udtryk udløses kl. 03:00 som forventet eller 03:17 ved et uheld. At gå videre langt før du installerer opgaven, kan du også teste scriptet alene (bash -x script.sh) og kontroller syntaksen for en crontab-fil med crontab -T-fil på distributioner der støtter det.

Hvad sker der, hvis dag-i-måned og ugedag begge er indstillet?

På Vixie cron (Linux) er reglen en logisk ELLER: Jobbet udløses, hvis en eller det andetaf de to felter matcher. Dette er kontraintuitivt og en kilde til fejl. Kvarts bruger en OG, derfor introduktionen af symbolet ? for eksplicit at angive "nej begrænsning.” Som en generel regel skal du kun rette et af de to felter.

Anmodningseksempel

curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"cron":"...","number_next_date":1}'

Inputskema

Felt Type Påkrævet Standard
cron string
number_next_date integer

Endpoints

  • GET https://cdrn.fr/api/v1/tools - lister alle tilgængelige værktøjer
  • GET https://cdrn.fr/api/v1/tools/cron-converter - henter skemaet for dette værktøj
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - udfører dette værktøj med et JSON-payload