Beräkna de nästa exekveringarna av ett cron-uttryck
- Panel
- Dokumentation
- API
Vad är ett cron-uttryck?
Ett cron-uttryck är en kort sträng som beskriver en återkommande tidpunkt. Det
Unix-ärvda formatet ryms i fem fält separerade med mellanslag: minut, timme,
dag i månaden, månad och veckodag. Den här syntaxen föddes med
cron-demonen av Brian Kernighan på 1970-talet och generaliserades sedan av Vixie cron
(1987) som tagits över av alla moderna Linux- och macOS-distributioner. Idag återfinns
samma syntax i de flesta moln-schemaläggare (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Apps) och CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── minute (0-59)
│ ┌── heure (0-23)
│ │ ┌── jour du mois (1-31)
│ │ │ ┌── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌── jour de la semaine (0-7 ou SUN-SAT, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *
Ett välformat cron-uttryck definierar alltså ett exakt cron-schema: varje fält kan vara ett fast värde, ett intervall, en lista, ett steg eller en asterisk som matchar allt. Kompaktheten i crontab-uttrycket är dess styrka, men det är också det som gör en cron-avkodare oumbärlig för att visuellt validera avsikten. Det är precis vad denna cron-konverterare är till för: producera en läsbar cron-förklaring plus listan över nästa körningar.
Anatomi av ett cron-uttryck
De fem fälten delar en gemensam grammatik. Här är de gränser som varje kolumn i ett standardiserat crontab-uttryck accepterar:
- Minut:
0-59. - Timme:
0-23, 24-timmars format. - Dag i månaden:
1-31. - Månad:
1-12eller textförkortningarnaJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Veckodag:
0-7där0och7båda representerar söndag, eller förkortningarnaSUN,MON,TUE,WED,THU,FRI,SAT.
Specialtecken delade av de fem fälten:
*: any value, matchar alla tillåtna värden i fältet.,: diskret lista, till exempel1,15,30i minutfältet.-: inklusivt intervall, till exempel9-17för kontorstid./: steg, till exempel*/15= var 15:e enhet, eller0-30/5= var 5:e minut mellan 0 och 30.
Quartz-tillägg (Java, AWS EventBridge, Spring): grammatiken växer till 6 eller 7
fält med en sekunder-kolumn först (0-59) och ibland en
år-kolumn sist (1970-2099). Quartz introducerar också ? (no specific
value, för att frikoppla dag-i-månaden och veckodag), L (last: sista dagen i månaden,
eller sista fredagen med 5L), W (närmaste arbetsdag) och #
(N:te veckodag i månaden, till exempel 2#3 för tredje måndagen). Ett Quartz-uttryck
är i allmänhet inte kompatibelt med en UNIX-crontab, och vice versa: det är den största
felkällan när man kopierar ett cron-uttryck mellan plattformar.
# UNIX / Vixie cron (5 champs)
0 9 * * 1-5
# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI
# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026
Varför avkoda ett cron-uttryck?
Att läsa 0 0 * * * går snabbt. Att läsa */7 2-5 1,15 * 1-5 är betydligt
svårare. När ett uttryck lämnar det triviala ökar risken för feltolkning och cron-avkodning
blir ett granskningssteg i sig.
- Produktionsdebug: förstå varför en uppgift triggades kl. 03:17 och inte kl. 03:00, eller identifiera en överlappning mellan två jobb.
- Kodgranskning: validera att en schemaläggare som pushats i en pull request gör vad författaren påstår, utan att behöva memorera semantiken för varje symbol.
- Schemaläggargranskning: gå igenom cron-jobben i Linux i
/etc/crontaboch/etc/cron.d/, Jenkins-triggers,spec.schedulei Kubernetes CronJob, reglerna i AWS EventBridge och jobben i GCP Cloud Scheduler. - Legacy-migration: ta över en historisk
/etc/crontabutan dokumentation och rekonstruera uppgiftskartan före ett infrastrukturbyte. - Onboarding: låta en ny utvecklare läsa en crontab utan att behöva lära sig alla specialtecken över en natt.
Så använder du cron-avkodaren
Stegen för att avkoda ett crontab-uttryck med verktyget:
- Klistra in ditt cron-uttryck i inmatningsfältet (5 fält separerade med mellanslag).
- Ange antalet nästa körningar att räkna ut.
- Klicka på convert för att starta cron-avkodningen: verktyget returnerar en mänsklig mening som förklarar utlösningen, plus den daterade listan över nästa körningar.
- Kontrollera visuellt att datumen motsvarar din avsikt (timme, dag, frekvens).
- Kopiera utdata via kopieringsknappen för att klistra in den i ett ärende, en PR eller en teknisk dokumentation.
Verktyget nöjer sig inte med en syntaktisk parsing: det ger en cron-förklaring i naturligt språk, vilket gör det både till en cron-avkodare och en schemavalidator.
Klassiska exempel på cron-uttryck
Mönstren nedan täcker de flesta cron-scheman som påträffas i produktion. De är alla giltiga på Linux crontab, Kubernetes CronJob, GitHub Actions och de flesta applikationsschemaläggare.
| Uttryck | Mänsklig läsning |
|---|---|
* * * * * |
Varje minut |
0 * * * * |
Varje hel timme |
0 0 * * * |
Varje dag vid midnatt |
0 0 * * 0 |
Varje söndag vid midnatt |
*/15 * * * * |
Var 15:e minut |
0 9 * * 1-5 |
09:00 måndag till fredag |
0 0 1 * * |
Den 1:a varje månad vid midnatt |
0 0,12 * * * |
Midnatt och middag varje dag |
*/5 9-17 * * 1-5 |
Var 5:e minut under arbetstid |
30 2 1,15 * * |
Den 1:a och 15:e varje månad klockan 02:30 |
För att köra en cron-uppgift på en Linux-server redigerar man användarens crontab från skalet:
# éditer la crontab de l'utilisateur courant
$ crontab -e
# lister les tâches existantes
$ crontab -l
# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Exempel på utdata från cron-konverteraren för */5 * * * *:
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Vanliga frågor om cron-avkodaren
Vad är skillnaden mellan UNIX-cron och Quartz?
UNIX/Vixie cron använder 5 fält (minut till veckodag), utan precision på sekundnivå, och har inget
inbyggt begrepp för "sista dagen i månaden". Quartz (Java, Spring, AWS EventBridge) lägger till en
sekunder-kolumn först, ibland en år-kolumn sist, och flera symboler
(?, L, W, #) som saknas i Linux-crontab. Ett
cron-uttryck i Quartz med 6 fält är därför inte direkt portabelt till
/etc/crontab, och tvärtom. Vår cron-avkodare riktar sig mot 5-fältsformatet
som täcker majoriteten av schemaläggare.
Hur kör man en cron-uppgift var 5:e minut?
Med steget / i minutfältet:
*/5 * * * * /usr/local/bin/check-health.sh
Detta crontab-uttryck triggar skriptet vid minuterna 0, 5, 10, 15... varje
timme, varje dag. För att begränsa till arbetstid måndag till fredag, lägg till villkor
på timme- och veckodagsfälten: */5 9-17 * * 1-5.
Vad betyder asterisken (*) i ett cron-uttryck?
Asterisken betyder any value: den matchar alla tillåtna värden i fältet. I
0 0 * * * betyder de tre stjärnorna "vilken dag som helst i månaden, vilken
månad som helst, vilken veckodag som helst". Kombinerat med de två första fälten satta till 0 får man
"varje dag vid midnatt". Stjärnan kan också kombineras med ett steg: */15 i
minutfältet = var 15:e minut.
Har crontab en tidszon?
Som standard, serverns tidszon. På en Linux-crontab är det systemets TZ (ofta UTC på VPS och
containrar). GitHub Actions tvingar UTC. Kubernetes CronJob använder kontrollerns tidszon,
konfigurerbar via spec.timeZone sedan 1.27. AWS EventBridge utvärderar uttryck i
UTC. Applikationsschemaläggare (Symfony Scheduler, Quartz, Airflow) tillåter ofta en
dedikerad tidszon per uppgift. Vid tvivel, kontrollera date på målservern och
jämför med utdata från cron-konverteraren.
Cron-jobb vs kommandot at: vilket ska man välja?
cron används för att köra en återkommande uppgift enligt ett schema. at
används för att köra ett kommando en enda gång vid en given tidpunkt. För en daglig
säkerhetskopiering, en loggrotation eller ett återkommande API-anrop, använd cron. För att skjuta upp en
engångsoperation ("kör om driftsättningen kl. 22 ikväll"), använd at:
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Hur testar man ett cron-uttryck utan att trigga det?
Det är precis rollen för denna cron-konverterare: den räknar ut de N nästa
körningarna från den aktuella tidpunkten, utan att starta något jobb. Du ser omedelbart om ditt
crontab-uttryck triggar kl. 03:00 som planerat eller kl. 03:17 av misstag. För att gå
längre innan du installerar uppgiften kan du också testa enbart skriptet (bash -x script.sh)
och kontrollera syntaxen i en crontab-fil med crontab -T fichier på distributioner
som stöder det.
Vad händer om både dag-i-månad och veckodag är satta?
På Vixie cron (Linux) är regeln ett logiskt ELLER: jobbet triggas om antingen
det ena eller andra fältet matchar. Det är kontraintuitivt och en källa till buggar. Quartz använder
ett OCH, vilket är anledningen till att symbolen ? infördes för att uttryckligen
signalera "ingen begränsning". Som tumregel, sätt bara ett av de två fälten.
Exempelförfrågan
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Indatasschema
| Fält | Typ | Obligatorisk | Standard |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Slutpunkter
GET https://cdrn.fr/api/v1/tools- listar alla tillgängliga verktygGET https://cdrn.fr/api/v1/tools/cron-converter- hämtar schemat för detta verktygPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- kör detta verktyg med en JSON-payload