CodeKitHub
Nástroje pro kód

Generátor cron výrazů

Naposledy aktualizováno:

Cron výraz je pětipolohový řetězec (minuta, hodina, den v měsíci, měsíc, den v týdnu), který plánovači jako Unix cron, crontab nebo CI/CD pipeline říká, přesně kdy má spustit úlohu — například `*/15 9-17 * * MON-FRI` znamená „každých 15 minut, mezi 9 a 17 hodinou, pondělí až pátek“. Tento nástroj funguje oběma směry: sestavte plán pomocí jednoduchých rozbalovacích nabídek a získejte cron řetězec, nebo vložte existující cron výraz a okamžitě uvidíte srozumitelný překlad plus dalších 5 časů, kdy se skutečně spustí. Řídí se standardní 5polohovou syntaxí POSIX/Vixie cron používanou v Unixu, Linux crontabu a většině plánovačů úloh. Vše běží lokálně ve vašem prohlížeči; nic, co napíšete, se nikam nenahrává.

Description
Next 5 runs
    Builder
    Minute
    Hour
    Day of month
    Month
    Day of week
    Syntax legend
    • * — any value
    • , — value list separator (e.g. 1,3,5)
    • - — range of values (e.g. 1-5)
    • / — step values (e.g. */15 = every 15)

    Co je tento nástroj?

    Cron výraz je kompaktní pětipolohový plánovací řetězec — `minuta hodina den-v-měsíci měsíc den-v-týdnu` — používaný démonem Unix `cron` a prakticky každým plánovačem úloh po jeho vzoru (crontab, Kubernetes CronJoby, GitHub Actions `schedule:`, Airflow, Jenkins). Každé pole přijímá hvězdičku (`*`, znamená „jakákoli hodnota“), konkrétní číslo, seznam oddělený čárkami (`1,15,30`), rozsah (`9-17`), krok (`*/15`, znamená „každých 15 jednotek“) nebo — pro měsíc a den v týdnu — třípísmenný název (`JAN`, `MON`) místo čísla.

    Kanonickou definicí této syntaxe je manuálová stránka Linux crontab(5), která dokumentuje přesně těchto pět polí, speciální znaky (`* , - /`) a osm zkratek `@` (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`), které většina implementací cronu, včetně Vixie cronu (verze dodávaná ve většině distribucí Linuxu), podporuje jako aliasy pro běžné plány.

    Tento nástroj implementuje přesně tento standardní 5polohový formát — formát, který byste zadali přímo do `crontab -e` na serveru Linux nebo macOS, nebo do pole `schedule:` Kubernetes CronJobu. Neimplementuje syntaxi Quartz cron, což je jiný, 6 nebo 7polohový formát používaný Java Quartz Scheduler a některými dodavatelskými nástroji (viz sekce srovnání níže, kdy potřebujete právě ten).

    Proč ho používat?

    • Právě jste zdědili produkční crontab s řádkem jako `17 3 * * 0` a bez komentáře, který by ho vysvětloval — vložte ho sem, než se čeho dotknete, a uvidíte, že jde skutečně o „každou neděli v 3:17“, ne o překlep.
    • Píšete GitHub Actions workflow s cron triggerem `schedule:` a pořád si nejste jistí, jestli `0 */6 * * *` skutečně znamená každých 6 hodin počínaje půlnocí — zkontrolujte dalších 5 časů spuštění před commitnutím YAML.
    • Nastavili jste cron úlohu s omezením podle dne v měsíci i dne v týdnu, jako `0 4 8 * MON`, a úloha se spouští ve dnech, které jste nečekali — tento nástroj odhalí chování sjednocení místo průniku, na kterém se skoro každý napoprvé chytí.
    • Sestavujete Kubernetes CronJob a potřebujete přesný řetězec `schedule:` pro „každých 15 minut, jen pracovní doba, pracovní dny“ bez ručního počítání polí — použijte builder s rozbalovacími nabídkami místo ručního zápisu.
    • Nejste si jistí, jestli konfigurace plánovače používá standardní cron nebo Quartz cron, protože dokumentace jen říká „cron výraz“ — zkontrolujte, jestli má 5 polí (tento nástroj) nebo 6-7 polí se znaky `?`/`L`/`W`/`#` (Quartz), než ztratíte čas laděním neshody formátu.
    • 100% na straně klienta: logika vašeho plánu nikdy neopustí váš prohlížeč.

    Jak se používá

    1. Pro překlad výrazu: napište nebo vložte 5polohový cron řetězec (nebo zkratku @ jako `@daily`) do vstupního pole.
    2. Přečtěte si srozumitelný popis a dalších 5 vypočítaných časů spuštění pod ním — obojí se aktualizuje živě, jak píšete.
    3. Pro sestavení výrazu: otevřete sekci Builder, vyberte režim (každý / každý N / konkrétní hodnota) pro každé z pěti polí a klikněte na „Generovat výraz“.
    4. Vygenerovaný výraz se vyplní do vstupního pole výše a okamžitě se promítne do panelů popisu a dalších spuštění.
    5. Použijte legendu syntaxe dole jako rychlou referenci pro `*`, `,`, `-` a `/`.
    6. Zkopírujte finální výraz pomocí tlačítka Kopírovat a vložte ho do crontabu, CI konfigurace nebo plánovače.

    Příklad

    Vstup

    */15 9-17 * * MON-FRI

    Výstup

    V 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, v pondělí, úterý, středu, čtvrtek, pátek

    Tento výraz se spouští každých 15 minut, ale jen v rozsahu hodin 09:00–17:59 a jen v pracovní dny — typický plán pollingu „pracovní doba“.

    Standardní cron vs. Quartz cron

    „Syntaxe cronu“ není jeden univerzální standard — dva formáty, na které narazíte nejčastěji, se liší počtem polí a významem několika speciálních znaků. Použijte tuto tabulku k potvrzení, že používáte správný pro váš cílový plánovač.

    AspektStandardní cron (tento nástroj)Quartz cron
    Počet polí5 (minuta hodina den-v-měsíci měsíc den-v-týdnu)6 nebo 7 (přidává sekundy a volitelně rok)
    PoužíváLinux/macOS crontab, Kubernetes CronJob, GitHub ActionsJava Quartz Scheduler, některé podnikové plánovače
    Nastaveny oba, den-v-měsíci i den-v-týdnuShoduje se s KTERÝMKOLI (sjednocení/OR)Vyžaduje `?` v jednom ze dvou polí — nelze nastavit obě na hodnotu zároveň
    Speciální další znakyŽádné mimo `* , - /`Přidává `?`, `L` (poslední), `W` (nejbližší pracovní den), `#` (n-tý den v týdnu měsíce)
    Plánování na úrovni sekundNepodporovánoPodporováno (první pole)

    Běžné receptury plánů

    Několik výrazů pokrývá většinu reálných plánovacích potřeb — vyplatí se je poznat na první pohled, místo je pokaždé znovu odvozovat.

    • `*/5 * * * *` — každých 5 minut, celý den. Běžné pro health checky a lehké pollingové úlohy.
    • `0 */6 * * *` — každých 6 hodin, přesně na hodinu (00:00, 06:00, 12:00, 18:00). Častý výchozí bod pro periodickou synchronizaci nebo úklidové úlohy.
    • `0 2 * * *` — jednou denně ve 2 hodiny ráno. Klasický slot pro noční zálohy, kdy je nejméně provozu.
    • `0 9 * * 1-5` — v 9 hodin, jen pondělí až pátek. Standard pro reporty nebo souhrny pouze v pracovní dobu.
    • `0 0 1 * *` — půlnoc 1. dne každého měsíce, ekvivalent zkratky `@monthly`. Používá se pro měsíční fakturační běhy nebo resety využití.
    • `*/15 9-17 * * MON-FRI` — každých 15 minut, ale jen v pracovní dobu v pracovní dny — kombinuje krok, rozsah a rozsah dnů v týdnu v jednom výrazu.

    Související nástroje

    Pracujete s konfiguracemi, plány nebo časovými razítky? Tyto nástroje se dobře doplňují s generátorem cronu.

    → Převodník časových razítek · Převodník světového času · Kalkulačka data

    Časté dotazy

    Co je to cron výraz?

    Cron výraz je pětipolohový textový řetězec (`minuta hodina den-v-měsíci měsíc den-v-týdnu`), který specifikuje opakující se plán pro démona Unix `cron` a kompatibilní plánovače. Každé pole může být `*` (jakákoli hodnota), číslo, seznam oddělený čárkami, rozsah (`a-b`) nebo krok (`*/n`); pole měsíc a den v týdnu přijímají i třípísmenné názvy jako `JAN` nebo `MON`. Kompletní specifikace je zdokumentovaná na manuálové stránce crontab(5).

    Co se stane, když jsou omezeny den v měsíci i den v týdnu zároveň?

    Toto je známý zádrhel cronu: podle sémantiky POSIX cron, když jsou OBĚ pole den-v-měsíci a den-v-týdnu omezená (ne `*`), úloha se spustí, pokud je splněna KTERÁKOLI z podmínek — jde o sjednocení (OR), ne průnik (AND). Například `0 4 8 * MON` se spustí ve 4 hodiny ráno jak 8. dne každého měsíce, TAK i každé pondělí, ne jen v pondělí, které náhodou připadá na 8. Tento nástroj implementuje přesně toto chování sjednocení při výpočtu dalších spuštění.

    Standardní cron vs. Quartz cron — který potřebuju?

    Tento nástroj generuje standardní 5polohovou syntaxi POSIX/Vixie cron — formát používaný v Linux/macOS `crontab`, Kubernetes CronJobech, GitHub Actions `schedule:` a většině unixových spouštěčů úloh. Quartz cron, používaný Java Quartz Scheduler a nástroji na něm postavenými (některé podnikové plánovače, starší konfigurace Spring Batch), je jiný 6 nebo 7polohový formát, který přidává úvodní pole sekund a mění význam některých speciálních znaků (`?` pro „žádná konkrétní hodnota“ v polích dne, `L`/`W`/`#` pro „poslední den“, „nejbližší pracovní den“ a „n-tý den v týdnu měsíce“). Pokud má váš plánovač 6 nebo 7 polí, nebo dokumentace zmiňuje `?`, `L`, `W` nebo `#`, potřebujete nástroj specifický pro Quartz — výrazy z tohoto generátoru se tam nebudou správně parsovat. Pokud je to přesně 5 polí (nebo zkratka typu `@daily`), jste na správném místě.

    Co znamenají zkratky @yearly, @monthly, @weekly, @daily a @hourly?

    Jsou to nestandardní, ale široce podporované zkratkové řetězce, které se rozbalí na běžné 5polohové výrazy: `@yearly`/`@annually` = `0 0 1 1 *` (jednou ročně, 1. ledna o půlnoci), `@monthly` = `0 0 1 * *` (1. den každého měsíce o půlnoci), `@weekly` = `0 0 * * 0` (každou neděli o půlnoci), `@daily`/`@midnight` = `0 0 * * *` (každý den o půlnoci), `@hourly` = `0 * * * *` (na začátku každé hodiny). Tento nástroj je všechny umí zpracovat a chová se k nim přesně jako k jejich rozbalenému 5polohovému ekvivalentu.

    Můžu použít názvy dnů/měsíců místo čísel?

    Ano. Pole měsíc přijímá třípísmenné názvy `JAN` až `DEC` a pole den v týdnu přijímá `SUN` až `SAT` (bez rozlišení velkých/malých písmen), zaměnitelně s čísly. Čísla dne v týdnu jdou 0–6, kde 0 = neděle; některé implementace přijímají i 7 pro neděli, což tento nástroj normalizuje na 0. Rozsahy a seznamy fungují i s názvy, např. `MON-FRI` nebo `JAN,JUN,DEC`.

    Odesílá se můj cron výraz na server?

    Ne. Parsování, srozumitelný popis i výpočet dalších spuštění probíhají lokálně v JavaScriptu ve vašem prohlížeči. Nic, co napíšete nebo vygenerujete, nikdy neopustí vaše zařízení.

    V jakém časovém pásmu se počítají další časy spuštění?

    Tento nástroj počítá další časy spuštění podle časového pásma vašeho prohlížeče, protože standardní cron sám o sobě nemá vestavěné pole časového pásma — skutečný démon nebo plánovač spouštějící vaši úlohu používá časové pásmo nastavené na svém hostitelském systému (nebo, u GitHub Actions a podobných cloudových plánovačů, UTC). Pokud se časové pásmo vašeho serveru liší od časového pásma prohlížeče, zobrazené časy myšlenkově posuňte, nebo si zkontrolujte konfiguraci časového pásma plánovače zvlášť.

    Jak naplánuju úlohu, aby běžela jen poslední den v měsíci?

    Standardní 5polohový cron nemá přímou syntaxi „poslední den v měsíci“ — to je jedna z funkcí, kterou přidává Quartz cron znakem `L`. Ve standardním cronu je běžným řešením naplánovat úlohu na 28.–31. den každý den (`0 0 28-31 * *`) a nechat skript samotný zkontrolovat, jestli zítřejší datum přejde do nového měsíce, než skutečně spustí svou logiku.

    Můžu naplánovat něco na neobvyklý interval, třeba každých 10 minut?

    Ano, pomocí syntaxe kroku: `*/10 * * * *` běží každých 10 minut počínaje :00 (tedy v :00, :10, :20, :30, :40, :50). Pamatujte, že kroky vždy počítají od minimální hodnoty pole, takže `*/10` v poli minut nikdy nepadne na :05 nebo :15 — pokud potřebujete takový posun, použijte místo toho explicitní seznam s čárkami, např. `5,15,25,35,45,55`.

    Proč se moje cron úloha zdá spouštět dvakrát najednou, nebo vůbec, kolem změny letního času?

    Standardní cron plánuje podle nástěnného času hostitelského systému, a přechody letního času vytvářejí buď vynechanou hodinu (jarní posun) nebo opakovanou hodinu (podzimní posun). Úloha naplánovaná na vynechanou nebo opakovanou hodinu se ten den může spustit nula- nebo dvakrát, v závislosti na konkrétním zpracování vašeho cron démona. Spouštění kritických infrastrukturních úloh na serverech nastavených na UTC (které nemá letní čas) se tomuto zcela vyhne.

    Související nástroje