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á
- Pro překlad výrazu: napište nebo vložte 5polohový cron řetězec (nebo zkratku @ jako `@daily`) do vstupního pole.
- 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.
- 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“.
- 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í.
- Použijte legendu syntaxe dole jako rychlou referenci pro `*`, `,`, `-` a `/`.
- 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-FRIVýstup
V 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, v pondělí, úterý, středu, čtvrtek, pátekTento 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č.
| Aspekt | Standardní 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 Actions | Java Quartz Scheduler, některé podnikové plánovače |
| Nastaveny oba, den-v-měsíci i den-v-týdnu | Shoduje 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 sekund | Nepodporováno | Podporová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.