Byg et cron-udtryk
- Dashboard
- Dokumentation
- API
Hvorfor en visuel cron-bygger?
Et cron-udtryk indeholder fem felter og forbliver alligevel et af de mest genererende
fejl i produktionen. Hvor mange gange har en udvikler skrevet 0 0 * * 1 og tænkt "hver
mandage", uden at huske at 1 kan betyde søndag afhængigt af implementeringerne? Hvor mange
gang har vi forvekslet */15 og 15? cron-byggeren svarer på dette
behov: visuelt komponer et crontab-udtryk fra aktuelle forudindstillinger eller
af individuelle felter, og gør det endelige udtryk klar til at indsætte i en Linux crontab, en Kubernetes
CronJob eller en GitHub Actions tidsplan.
Værktøjet er det modsatte af vores cron-dekoder: hvor konverteren tager et udtryk og udfører de næste henrettelser, bygherren tager menneskelige valg og producerer det tilsvarende cron-udtryk.
Hvordan det virker
Den grafiske grænseflade tilbyder to komplementære kompositionstilstande:
- Forudindstillet tilstand: en frekvensvælger (hvert minut, hver time, hver dag, hver uge, hver måned, hvert år, brugerdefineret), som straks genererer et cron-udtryk gyldig.
- Felttilstand: fem redigerbare felter (minut, time, dag i måneden, måned, dag i
uge), hvor du frit indtaster
*, et heltal, et interval1-5, en liste1,15,30eller et trin*/15.
Bygherren opdaterer udtrykket i realtid og viser en kortfattet menneskelig læsning ("hver dag kl. 03.00", "hvert 15. minut"), hvilket tjener som en beskyttelse: hvis sætningen ikke passer med din hensigt, udtrykket er sandsynligvis forkert.
De fem cron-felter, i almindeligt sprog
Et standard cron-udtryk indeholder fem felter adskilt af mellemrum:
minut time dag-i-måned måned dag-i-uge
* * * * *
- minut (0 til 59);
- time (0 til 23);
- dag i måneden (1 til 31);
- måned (1 til 12 eller forkortelser Jan, Feb osv.);
- ugedag (0 til 7, 0 og 7 er begge søndag i de fleste implementeringer).
Hvert felt accepterer flere former: * (alle værdier), et specifikt heltal
(5), liste (1,3,5), interval (9-17), trin (*/15
hver 15. værdi) eller en kombination (0-30/5).
Typiske anvendelsestilfælde
- Udvikler, der lærer cron: visualiser, hvordan hvert felt interagerer uden at risikere et falsk udtryk i produktionen.
- Sysadmin i en fart: generer på få sekunder en tidsplan for en Linux cron, en Kubernetes CronJob eller et Ansible job uden at genlæse man-siden.
- Udvikler uden POSIX-erfaring: lav et crontab-udtryk gyldig for Symfony Scheduler, Laravel Scheduler eller node-cron uden at kende den historiske syntaks.
- DevOps i gennemgang: Prototype hurtigt et udtryk, der skal foreslås i en pull anmodning, og valider den derefter med cron-dekoderen.
- Ældre migration: omformuler et historisk cron-udtryk ved hjælp af builderen for at sikre semantikken, før du skubber den andre steder.
Almindelige forudindstillinger
Valg af en forudindstilling overskriver de enkelte felter og producerer det tilsvarende udtryk:
- Hvert minut:
* * * * *. Undgå i produktion, medmindre det er nødvendigt særligt. - Hver time:
0 * * * *. I begyndelsen af hver time. - Hver dag:
0 0 * * *. Ved midnat. - Hver uge:
0 0 * * 0. Hver søndag ved midnat. - Hver måned:
0 0 1 * *. Den 1. i måneden ved midnat. - Hvert år:
0 0 1 1 *. 1. januar ved midnat.
Fælles mønstre at kende
| Udtryk | Menneskelig læsning |
|---|---|
0 0 * * * |
Hver dag ved midnat |
*/15 * * * * |
Hvert 15. minut |
0 9 * * 1-5 |
Hver arbejdsdag kl. 9.00 |
0 0 1 * * |
1. i måneden ved midnat |
0 0 * * 0 |
Hver søndag ved midnat |
*/5 9-17 * * 1-5 |
Hvert 5. minut i åbningstiden |
0 3 * * * |
Hver dag kl. 03.00 |
30 2 1,15 * * |
Den 1. og 15. i måneden kl. 02:30 |
Komponer et brugerdefineret udtryk
For mere specifikke tilfælde afslører guiden de fem felter for gratis adgang. Nogle eksempler nyttigt:
- Hver dag kl. 03.00: minut=
0, time=3, andre*felter. - Hvert 15. minut: minut=
*/15, andre felter*. - Mandag til fredag kl. 9.00: minut=
0, time=9, day-of-the-week=1-5. - Hver 1. og 15. i måneden ved middagstid: minut=
0, time=12, day-of-month=1.15. - Hvert 5. minut mellem kl. 9.00 og 17.00: minut=
*/5, time=9-17.
Sådan bruger du cron-builderen
- Vælg en forudindstilling (hvert minut, hver time, hver dag, hver uge, hver måned, hvert år) som svarer til grundlaget for dit behov.
- Juster om nødvendigt ved direkte at redigere de fem felter (minut, time, dag i måneden, måned, dag ugens).
- Læs den menneskelige sætning genereret af værktøjet for at bekræfte hensigten.
- Kopiér cron-udtrykket, der er produceret via kopieringsknappen.
- Valider tidsplanen med vores cron-dekoder, som beregner næste faktiske udførelsesdatoer.
- Indsæt udtrykket i din Linux crontab, din Kubernetes CronJob, din Symfony Scheduler eller din GitHub Actions arbejdsgang.
Klassiske fælder
- Dag i måneden og ugedagen kombineret: hvis begge ikke er
*, adfærden er forskellig mellem implementeringer. Linux/Vixie cron anvender et ELLER; den Moderne biblioteker opfører sig nogle gange anderledes. For at undgå. - Dag 1 = mandag eller søndag?: afhængigt af land og konvention. Mest cron Unix betragter søndag=0 og lørdag=6. Tjek din planlægger.
- Tidszone: En Unix cron bruger serverens tidszone som standard. Den Programplanlæggere (Symfony Scheduler, Quartz) giver dig ofte mulighed for at indstille en dedikeret tidszone.
- Manglende minut:
* * * * *kører jobbet hvert minut, hvilket er sjældent, hvad vi ønsker. Overvej at indstille en specifik trigger (0) for timeopgaver.
Menneskelig læsning og output
Ud over cron-udtrykket tilbyder værktøjet kortfattet menneskelig læsning ("alle dage ved midnat", "hvert 5. minut"). Dette er en sikring: hvis sætningen ikke svarer til din hensigt, er udtrykket formentlig forkert. For en kompleks sag, så brug vores cron-dekoder til at beregne de næste faktiske udførelsesdatoer.
Ofte stillede spørgsmål
Kan jeg manuelt redigere udtrykket efter brug af grænsefladen?
Ja. Builder er ikke en eksklusiv tilstand: de fem felter forbliver redigerbare til enhver tid. Dig kan starte fra en forudindstilling, og derefter justere et felt i hånden for at få encrontab skræddersyet udtryk. Den menneskelige læsning genberegnes med det samme.
Understøtter værktøjet 6-felts Quartz-format (med sekunder)?
Nej: 5-feltsformatet er Unix-standarden og det fælles grundlag for de fleste planlæggere
(Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler).
Quartz (Java) accepterer et ekstra felt for sekunder og specifikke symboler
(?, L, W, #), men dette behov forbliver sjældent.
Hvordan administreres tidszonen?
Bygherren producerer et neutralt cron-udtryk: det er motoren, der udfører jobbet, der anvender dens
tidszone. På en Linux crontab er dette serverens TZ. På GitHub Actions er det UTC. På
Kubernetes 1.27+, kan du indstille spec.timeZone i manifestet. Symfony Scheduler og
Quartz afslører en dedikeret tidszone pr. opgave.
Hvordan validerer jeg mit udtryk uden at køre det i produktion?
Brug vores cron-dekoder. Den beregner de næste N henrettelser fra det aktuelle øjeblik uden at starte noget job. Dette er den bedste måde at bekræfte, at a cron-udtryk udløses på det planlagte tidspunkt, før det implementeres.
Hvad har dette at gøre med Symfony Scheduler?
Symfony Scheduler accepterer 5-felts cron-udtryk via Schedule::cron('0 3 * * *', ...)
. Udtrykket produceret af bygherren kan derfor indsættes som det er. Det samme for Laravel
Scheduler (->cron('...')), node-cron, Hangfire og Airflow.
Skal kommandoen have præfiks i systemets crontab?
Ja, i /etc/crontab skal du bruge en bruger (0 3 * * * www-data /usr/bin/php
...), mens crontab -e pr. bruger udelader det. Selve udtrykket forbliver
identiske.
Anmodningseksempel
curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
-H "Content-Type: application/json" \
-d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'
Inputskema
| Felt | Type | Påkrævet | Standard |
|---|---|---|---|
preset |
choice (none, every_minute, hourly, daily, weekly, monthly, yearly) | – | none |
minute |
string | – | * |
hour |
string | – | * |
day_of_month |
string | – | * |
month |
string | – | * |
day_of_week |
string | – | * |
Endpoints
GET https://cdrn.fr/api/v1/tools- lister alle tilgængelige værktøjerGET https://cdrn.fr/api/v1/tools/cron-builder- henter skemaet for dette værktøjPOST https://cdrn.fr/api/v1/tools/cron-builder/execute- udfører dette værktøj med et JSON-payload