Byg et cron-udtryk

bygger et cron-udtryk fra visuelle felter eller en preset (hvert minut, hver time, dagligt, ugentligt...)

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 interval 1-5, en liste 1,15,30 eller 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

  1. Vælg en forudindstilling (hvert minut, hver time, hver dag, hver uge, hver måned, hvert år) som svarer til grundlaget for dit behov.
  2. Juster om nødvendigt ved direkte at redigere de fem felter (minut, time, dag i måneden, måned, dag ugens).
  3. Læs den menneskelige sætning genereret af værktøjet for at bekræfte hensigten.
  4. Kopiér cron-udtrykket, der er produceret via kopieringsknappen.
  5. Valider tidsplanen med vores cron-dekoder, som beregner næste faktiske udførelsesdatoer.
  6. 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øjer
  • GET https://cdrn.fr/api/v1/tools/cron-builder - henter skemaet for dette værktøj
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - udfører dette værktøj med et JSON-payload