Zostaviť cron výraz

zostavuje cron výraz z vizuálnych polí alebo z presetu (každú minútu, hodinový, denný, týždenný...)

Prečo vizuálny cron builder?

Cron expression drží na piatich poliach a napriek tomu zostáva jedným z najgenerujúcejších bugov v produkcii. Koľkokrát napísal vývojár 0 0 * * 1 mysliac si "každý pondelok", bez pripomenutia si, že 1 môže znamenať nedeľu podľa implementácií? Koľkokrát sme zamieňali */15 a 15? Cron builder odpovedá na túto potrebu: vizuálne skladať crontab expression, z bežných preset hodnôt alebo individuálnych polí, a získať finálny výraz pripravený na vloženie do Linux crontab, Kubernetes CronJob alebo GitHub Actions schedulu.

Nástroj je opakom nášho cron dekódera: tam, kde converter berie výraz a rozbaľuje ďalšie spustenia, builder berie ľudské voľby a produkuje zodpovedajúci cron výraz.

Ako to funguje

Grafické rozhranie navrhuje dva komplementárne módy zloženia:

  • Preset mód: selektor frekvencie (every minute, every hour, every day, every week, every month, every year, custom), ktorý okamžite generuje validný cron expression.
  • Field mód: päť editovateľných polí (minúta, hodina, deň mesiaca, mesiac, deň týždňa), kde voľne zadávate *, celé číslo, rozsah 1-5, zoznam 1,15,30 alebo krok */15.

Builder aktualizuje výraz v reálnom čase a zobrazuje stručné ľudské čítanie ("každý deň o 3h", "každých 15 minút"), ktoré slúži ako poistka: ak veta nesedí s vaším úmyslom, výraz je pravdepodobne nesprávny.

Päť cron polí, jasne

Štandardný cron expression obsahuje päť polí oddelených medzerami:

minuta  hodina  den-mesiaca  mesiac  den-tyzdna
*       *       *            *       *
  • minúta (0 až 59);
  • hodina (0 až 23);
  • deň mesiaca (1 až 31);
  • mesiac (1 až 12 alebo skratky Jan, Feb, atď.);
  • deň týždňa (0 až 7, 0 a 7 reprezentujú nedeľu vo väčšine implementácií).

Každé pole akceptuje viacero foriem: * (všetky hodnoty), presné celé číslo (5), zoznam (1,3,5), rozsah (9-17), krok (*/15 každých 15 hodnôt), alebo kombinácia (0-30/5).

Typické prípady použitia

  • Vývojár, ktorý sa učí cron: vizualizovať, ako každé pole interaguje, bez rizika nesprávneho výrazu v produkcii.
  • Ponáhľajúci sa sysadmin: generovať za niekoľko sekúnd schedule pre Linux cron, Kubernetes CronJob alebo Ansible job bez opätovného čítania man page.
  • Vývojár bez POSIX skúseností: produkovať validný crontab expression pre Symfony Scheduler, Laravel Scheduler alebo node-cron bez znalosti historickej syntaxe.
  • DevOps v review: rýchlo prototypovať výraz na návrh v pull requeste, potom ho validovať cron dekóderom.
  • Legacy migrácia: preformulovať historický cron výraz prechodom cez builder pre uistenie sa o sémantike pred jeho posunutím inam.

Bežné presety

Výber presetu prepisuje individuálne polia a produkuje zodpovedajúci výraz:

  • Každú minútu: * * * * *. Vyhnúť sa v produkcii okrem konkrétnej potreby.
  • Každú hodinu: 0 * * * *. Pri každom začiatku hodiny.
  • Každý deň: 0 0 * * *. O polnoci.
  • Každý týždeň: 0 0 * * 0. Každú nedeľu o polnoci.
  • Každý mesiac: 0 0 1 * *. 1. v mesiaci o polnoci.
  • Každý rok: 0 0 1 1 *. 1. januára o polnoci.

Bežné patterns na znalosť

Výraz Ľudské čítanie
0 0 * * * Každý deň o polnoci
*/15 * * * * Každých 15 minút
0 9 * * 1-5 Každý pracovný deň o 9h
0 0 1 * * 1. v mesiaci o polnoci
0 0 * * 0 Každú nedeľu o polnoci
*/5 9-17 * * 1-5 Každých 5 minút v pracovných hodinách
0 3 * * * Každý deň o 3h ráno
30 2 1,15 * * 1. a 15. v mesiaci o 2h30

Skomponovať vlastný výraz

Pre špecifickejšie prípady asistent exponuje päť polí vo voľnom vstupe. Niekoľko užitočných príkladov:

  • Každý deň o 3h ráno: minute=0, hour=3, ostatné polia *.
  • Každých 15 minút: minute=*/15, ostatné polia *.
  • Pondelok až piatok o 9h: minute=0, hour=9, day-of-week=1-5.
  • 1. a 15. v mesiaci na poludnie: minute=0, hour=12, day-of-month=1,15.
  • Každých 5 minút medzi 9h a 17h: minute=*/5, hour=9-17.

Ako používať cron builder

  1. Vyberte preset (every minute, every hour, every day, every week, every month, every year), ktorý zodpovedá základu vašej potreby.
  2. Spresnite v prípade potreby priamou úpravou piatich polí (minúta, hodina, deň mesiaca, mesiac, deň týždňa).
  3. Prečítajte ľudskú vetu vygenerovanú nástrojom pre potvrdenie zámeru.
  4. Skopírujte produkovaný cron expression cez tlačidlo kopírovania.
  5. Validujte schedule naším cron dekóderom, ktorý počíta ďalšie reálne dátumy spustenia.
  6. Vložte výraz do vášho Linux crontab, Kubernetes CronJob, Symfony Scheduler alebo GitHub Actions workflow.

Klasické pasti

  • Kombinovaný deň mesiaca a deň týždňa: ak oba nie sú *, správanie sa líši podľa implementácií. Linux/Vixie cron aplikuje OR; moderné knižnice majú niekedy odlišné správanie. Vyhnúť sa.
  • Deň 1 = pondelok alebo nedeľa?: podľa krajiny a konvencie. Väčšina Unix cron považuje nedeľa=0 a sobota=6. Skontrolujte váš planner.
  • Časové pásmo: Unix cron používa defaultne pásmo servera. Aplikačné plannery (Symfony Scheduler, Quartz) často umožňujú fixovať dedikované pásmo.
  • Chýbajúca minúta: * * * * * spúšťa job každú minútu, čo zriedka chceme. Pamätajte fixovať presný trigger (0) pre hodinové úlohy.

Ľudské čítanie a výstup

Okrem cron expression nástroj navrhuje stručné ľudské čítanie ("každý deň o polnoci", "každých 5 minút"). Je to poistka: ak veta nezodpovedá vášmu zámeru, výraz je pravdepodobne nesprávny. Pre komplexný prípad použite potom náš cron dekóder na výpočet ďalších reálnych dátumov spustenia.

Často kladené otázky

Môžem manuálne upraviť výraz po použití rozhrania?

Áno. Builder nie je exkluzívny mód: päť polí zostáva editovateľných kedykoľvek. Môžete začať s presetom, potom upraviť pole ručne pre získanie crontab expression na mieru. Ľudské čítanie je okamžite prepočítané.

Podporuje nástroj Quartz formát so 6 poľami (so sekundami)?

Nie: 5-poľový formát je Unix štandard a spoločná báza pre väčšinu plannerov (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Quartz (Java) akceptuje dodatočné pole pre sekundy a špecifické symboly (?, L, W, #), ale táto potreba zostáva zriedkavá.

Ako je spravované časové pásmo?

Builder produkuje neutrálny cron výraz: je to engine spúšťajúci job, ktorý aplikuje svoje časové pásmo. Na Linux crontab je to TZ servera. Na GitHub Actions je to UTC. Na Kubernetes 1.27+ môžete fixovať spec.timeZone v manifeste. Symfony Scheduler a Quartz exponujú dedikované pásmo per úlohu.

Ako validovať môj výraz bez jeho spustenia v produkcii?

Použite náš cron dekóder. Počíta N ďalších spustení od aktuálneho okamihu, bez spustenia akéhokoľvek jobu. Je to najlepší spôsob potvrdenia, že cron expression sa skutočne spúšťa v plánovanej hodine pred jej nasadením.

Aký je vzťah so Symfony Scheduler?

Symfony Scheduler akceptuje 5-poľové cron výrazy cez Schedule::cron('0 3 * * *', ...) . Výraz produkovaný builderom môže byť teda vložený tak, ako je. Rovnako pre Laravel Scheduler (->cron('...')), node-cron, Hangfire a Airflow.

Treba prefixovať príkaz v systémovom crontab?

Áno, v /etc/crontab treba užívateľa (0 3 * * * www-data /usr/bin/php ...), zatiaľ čo crontab -e per užívateľa ho vynecháva. Samotný výraz zostáva identický.

Ukážka požiadavky

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":"*"}'

Vstupná schéma

Pole Typ Povinné Predvolené
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 *

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všetky dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/cron-builder - získa schému tohto nástroja
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - spustí tento nástroj s JSON payloadom