Vypočítať ďalšie spustenia cron výrazu

analyzuje a zobrazuje ďalšie dátumy spustenia cron konfigurácie

Čo je cron expression?

Cron expression je krátky reťazec popisujúci časovú recurrenciu. Unix zdedený formát drží na piatich poliach oddelených medzerami: minúta, hodina, deň mesiaca, mesiac a deň týždňa. Táto syntax vznikla s cron démonom Briana Kernighana v 70. rokoch, potom zovšeobecnená Vixie cronom (1987) prevzatým všetkými modernými Linux a macOS distribúciami. Dnes sa rovnaká syntax nachádza vo väčšine cloudových plannerov (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) a CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── minuta (0-59)
│ ┌── hodina (0-23)
│ │ ┌── den mesiaca (1-31)
│ │ │ ┌── mesiac (1-12 alebo JAN-DEC)
│ │ │ │ ┌── den tyzdna (0-7 alebo SUN-SAT, 0 a 7 = nedela)
│ │ │ │ │
* * * * *

Správne formovaný cron expression definuje presný cron schedule: každé pole môže byť fixná hodnota, rozsah, zoznam, krok alebo hviezdička matchujúca všetko. Kompaktnosť crontab expression je jeho silou, ale je to tiež to, čo robí cron decoder nepostrádateľným pre vizuálnu validáciu zámeru. Je to celý objekt tohto cron converteru: produkovať čitateľné cron vysvetlenie plus zoznam ďalších spustení.

Anatómia cron expression

Päť polí zdieľa spoločnú gramatiku. Tu sú hraničné hodnoty akceptované každým stĺpcom štandardného crontab expression:

  • Minúta: 0-59.
  • Hodina: 0-23, 24h formát.
  • Deň mesiaca: 1-31.
  • Mesiac: 1-12 alebo textové skratky JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
  • Deň týždňa: 0-7, kde 0 a 7 reprezentujú nedeľu, alebo skratky SUN, MON, TUE, WED, THU, FRI, SAT.

Špeciálne znaky zdieľané piatimi poliami:

  • *: any value, matchuje všetky povolené hodnoty poľa.
  • ,: diskrétny zoznam, napríklad 1,15,30 v poli minúta.
  • -: inkluzívny rozsah, napríklad 9-17 pre pracovné hodiny.
  • /: krok (step), napríklad */15 = každých 15 jednotiek, alebo 0-30/5 = každých 5 minút medzi 0 a 30.

Quartz rozšírenia (Java, AWS EventBridge, Spring): gramatika rastie na 6 alebo 7 polí so stĺpcom sekundy na začiatku (0-59) a niekedy stĺpcom rok na konci (1970-2099). Quartz tiež zavádza ? (no specific value, pre oddelenie deň-mesiaca a deň-týždňa), L (last: posledný deň mesiaca, alebo posledný piatok s 5L), W (najbližší pracovný deň) a # (N-tý deň týždňa mesiaca, napríklad 2#3 pre 3. pondelok). Quartz výraz zvyčajne nie je kompatibilný s UNIX crontab a naopak: je to hlavný zdroj chýb pri kopírovaní cron expression z jednej platformy na druhú.

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

# Quartz (6 poli so sekundami)
0 0 9 ? * MON-FRI

# Quartz (7 poli s rokom)
0 0 9 ? * MON-FRI 2026

Prečo dekódovať cron expression?

Čítať 0 0 * * * je rýchle. Čítať */7 2-5 1,15 * 1-5 je výrazne menej. Keď výraz vychádza z triviálneho, riziko chybnej interpretácie rastie a cron decode sa stáva samostatnou review fázou.

  • Production debug: pochopiť, prečo sa úloha spustila o 03h17 a nie o 03h00, alebo identifikovať prekrytie medzi dvomi jobmi.
  • Code review: validovať, že planner push v pull requeste robí to, čo autor tvrdí, bez nutnosti memorovať sémantiku každého symbolu.
  • Audit plannerov: prejsť cez cron joby Linuxu v /etc/crontab a /etc/cron.d/, Jenkins triggery, spec.schedule Kubernetes CronJob, pravidlá AWS EventBridge a joby GCP Cloud Scheduler.
  • Legacy migrácia: prevziať historický /etc/crontab bez dokumentácie a rekonštituovať mapu úloh pred zmenou infraštruktúry.
  • Onboarding: umožniť novému vývojárovi prečítať crontab bez nutnosti naučiť sa všetky špeciálne znaky zo dňa na deň.

Ako používať cron decoder

Postup pre dekódovanie crontab expression nástrojom:

  1. Vložte váš cron expression do vstupného poľa (5 polí oddelených medzerami).
  2. Indikujte počet nasledujúcich spustení na výpočet.
  3. Kliknite na convert pre spustenie cron decode: nástroj vráti ľudskú vetu vysvetľujúcu spustenie, plus dátumovaný zoznam ďalších spustení.
  4. Vizuálne overte, že dátumy zodpovedajú vášmu zámeru (hodina, deň, frekvencia).
  5. Skopírujte výstup cez tlačidlo kopírovania pre jeho vloženie do ticketu, PR alebo technickej dokumentácie.

Nástroj sa neuspokojí so syntaktickým parsovaním: poskytuje cron vysvetlenie v prirodzenom jazyku, čo z neho robí súčasne cron decoder a validátor plánovania.

Klasické príklady cron expression

Nižšie uvedené patterns pokrývajú podstatu cron schedules stretávaných v produkcii. Sú všetky validné na Linux crontab, Kubernetes CronJob, GitHub Actions a väčšine aplikačných plannerov.

Výraz Ľudské čítanie
* * * * * Každú minútu
0 * * * * Každú hodinu presne
0 0 * * * Každý deň o polnoci
0 0 * * 0 Každú nedeľu o polnoci
*/15 * * * * Každých 15 minút
0 9 * * 1-5 9h00 od pondelka do piatku
0 0 1 * * 1. v každom mesiaci o polnoci
0 0,12 * * * O polnoci a na poludnie každý deň
*/5 9-17 * * 1-5 Každých 5 minút v pracovných hodinách
30 2 1,15 * * 1. a 15. v mesiaci o 2h30

Pre spustenie cron úlohy na Linux serveri editujeme užívateľskú crontab zo shellu:

# editovat crontab aktualneho uzivatela
$ crontab -e

# vypisat existujuce ulohy
$ crontab -l

# priklad pridaneho riadku: denna zaloha o 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Príklad výstupu cron converteru pre */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
...

Často kladené otázky o cron dekóderi

Aký rozdiel medzi UNIX cron a Quartz?

UNIX/Vixie cron používa 5 polí (minúta po deň-týždňa), bez presnosti na sekundu, a nemá natívnu predstavu o "poslednom dni mesiaca". Quartz (Java, Spring, AWS EventBridge) pridáva stĺpec sekundy na začiatok, niekedy stĺpec rok na koniec, a niekoľko symbolov (?, L, W, #) chýbajúcich v Linux crontab. Quartz cron expression so 6 poľami teda nie je priamo prenosný do /etc/crontab, a naopak. Náš cron decoder cieli 5-poľový formát, ktorý pokrýva väčšinu plannerov.

Ako spustiť cron úlohu každých 5 minút?

Krokom / na poli minúta:

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

Tento crontab expression spúšťa skript v minútach 0, 5, 10, 15... každej hodiny, každý deň. Pre obmedzenie na pracovné hodiny pondelok až piatok pridajte podmienky na polia hodina a deň-týždňa: */5 9-17 * * 1-5.

Čo znamená hviezdička (*) v cron expression?

Hviezdička znamená any value: matchuje všetky povolené hodnoty poľa. V 0 0 * * * tri hviezdy znamenajú "akýkoľvek deň mesiaca, akýkoľvek mesiac, akýkoľvek deň týždňa". Kombinované s prvými dvomi poliami fixovanými na 0, získame "každý deň o polnoci". Hviezda sa tiež môže kombinovať s krokom: */15 v minúte = každých 15 minút.

Má crontab časové pásmo?

Defaultne pásmo servera. Na Linux crontab je to systémové TZ (často UTC na VPS a kontajneroch). GitHub Actions vynucuje UTC. Kubernetes CronJob používa pásmo kontroléra, konfigurovateľné cez spec.timeZone od 1.27. AWS EventBridge vyhodnocuje výrazy v UTC. Aplikačné plannery (Symfony Scheduler, Quartz, Airflow) často umožňujú fixovať dedikované pásmo per úlohu. V prípade pochybností overte date na cieľovom serveri a porovnajte s výstupom cron converteru.

Cron job vs at príkaz: ktorý zvoliť?

cron slúži na spustenie opakujúcej sa úlohy podľa plánu. at slúži na spustenie príkazu jednorazovo v danom okamihu. Pre dennú zálohu, log rotáciu alebo pravidelné API volanie použite cron. Pre odloženie jednorazovej operácie ("znovu spusti tento deploy o 22h dnes večer") použite at:

$ echo "/usr/local/bin/deploy.sh" | at 22:00
Ako testovať cron expression bez jeho spustenia?

Je to presne úloha tohto cron converteru: počíta N ďalších spustení od aktuálneho okamihu, bez spustenia akéhokoľvek jobu. Okamžite vidíte, či váš crontab expression sa spúšťa o 03h00, ako bolo plánované, alebo o 03h17 omylom. Pre ďalšie kroky pred inštaláciou úlohy môžete tiež testovať skript samotný (bash -x script.sh) a overiť syntax crontab súboru cez crontab -T fichier na distribúciách, ktoré to podporujú.

Čo sa stane, ak sú deň-mesiaca a deň-týždňa oba fixované?

Na Vixie cron (Linux) je pravidlo logické OR: job sa spustí, ak jedno alebo druhé z dvoch polí matchuje. Je to kontraintuitívne a zdroj bugov. Quartz používa AND, odkiaľ zavedenie symbolu ? pre explicitné signalizovanie "žiadna podmienka". Vo všeobecnosti fixujte iba jedno z dvoch polí.

Ukážka požiadavky

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

Vstupná schéma

Pole Typ Povinné Predvolené
cron string
number_next_date integer

Koncové body

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