Vypočítat další spuštění cron výrazu

analyzuje a zobrazuje další data spuštění cron konfigurace

Co je cron expression?

Cron expression je krátký řetězec, který popisuje opakování v čase. Formát zděděný z Unixu má pět polí oddělených mezerami: minuta, hodina, den měsíce, měsíc a den týdne. Tato syntaxe se zrodila s démonem cron Briana Kernighana v sedmdesátých letech, pak generalizovaná Vixie cronem (1987) převzatým všemi moderními Linux a macOS distribucemi. Dnes se stejná syntaxe nachází ve většině cloud plánovačů (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) a CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── minuta (0-59)
│ ┌── hodina (0-23)
│ │ ┌── den měsíce (1-31)
│ │ │ ┌── měsíc (1-12 nebo JAN-DEC)
│ │ │ │ ┌── den týdne (0-7 nebo SUN-SAT, 0 a 7 = neděle)
│ │ │ │ │
* * * * *

Dobře formovaný cron expression tedy definuje přesný cron schedule: každé pole může být pevná hodnota, rozsah, seznam, krok nebo hvězdička, která matchuje vše. Kompaktnost crontab expression je jeho silou, ale je to také to, co dělá cron decoder nepostradatelným pro vizuální validaci úmyslu. To je celý objekt tohoto cron converteru: produkovat čitelné cron vysvětlení, plus seznam dalších provedení.

Anatomie cron expression

Pět polí sdílí společnou gramatiku. Zde jsou limity přijímané každým sloupcem standardního expression crontab:

  • Minuta: 0-59.
  • Hodina: 0-23, 24h formát.
  • Den měsíce: 1-31.
  • Měsíc: 1-12 nebo textové zkratky JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
  • Den týdne: 0-7 kde 0 a 7 reprezentují neděli, nebo zkratky SUN, MON, TUE, WED, THU, FRI, SAT.

Speciální znaky sdílené pěti poli:

  • *: any value, matchuje všechny povolené hodnoty pole.
  • ,: diskrétní seznam, například 1,15,30 v poli minuty.
  • -: inkluzivní rozsah, například 9-17 pro pracovní hodiny.
  • /: krok (step), například */15 = každých 15 jednotek, nebo 0-30/5 = každých 5 minut mezi 0 a 30.

Quartz extensions (Java, AWS EventBridge, Spring): gramatika stoupá na 6 nebo 7 polí se sloupcem sekundy na začátku (0-59) a někdy sloupcem rok na konci (1970-2099). Quartz také zavádí ? (no specific value, pro oddělení dne-měsíce a dne-týdne), L (last: poslední den měsíce, nebo poslední pátek s 5L), W (nejbližší pracovní den) a # (N-tý den týdne v měsíci, například 2#3 pro 3. pondělí). Quartz expression obecně není kompatibilní s UNIX crontabem a vice versa: je to hlavní zdroj chyb při kopírování cron expression z jedné platformy na druhou.

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

# Quartz (6 polí se sekundami)
0 0 9 ? * MON-FRI

# Quartz (7 polí s rokem)
0 0 9 ? * MON-FRI 2026

Proč dekódovat cron expression?

Číst 0 0 * * * je rychlé. Číst */7 2-5 1,15 * 1-5 je výrazně méně. Když výraz vystoupí z triviálního, riziko interpretační chyby roste a cron decode se stává samostatným krokem review.

  • Produkční debug: pochopit, proč se úloha spustila ve 03:17 a ne ve 03:00, nebo identifikovat překrytí mezi dvěma joby.
  • Code review: validovat, že plánovač pushovaný v pull requestu skutečně dělá to, co autor tvrdí, bez nutnosti memorizovat sémantiku každého symbolu.
  • Audit plánovačů: projít cron jobs Linuxu v /etc/crontab a /etc/cron.d/, Jenkins triggery, spec.schedule Kubernetes CronJob, pravidla AWS EventBridge a joby GCP Cloud Scheduler.
  • Migrace legacy: převzít historický /etc/crontab bez dokumentace a rekonstruovat kartografii úloh před změnou infrastruktury.
  • Onboarding: umožnit novému developerovi přečíst crontab bez nutnosti naučit se všechny speciální znaky najednou.

Jak používat cron decoder

Postup pro dekódování expression crontab s nástrojem:

  1. Vložte svůj cron expression do vstupního pole (5 polí oddělených mezerami).
  2. Uveďte počet dalších provedení k výpočtu.
  3. Klikněte na convert pro spuštění cron decode: nástroj vrátí lidskou frázi vysvětlující spouštění, plus datovaný seznam dalších provedení.
  4. Vizuálně ověřte, že data odpovídají vašemu úmyslu (hodina, den, frekvence).
  5. Zkopírujte výstup přes tlačítko kopírování pro vložení do tiketu, PR nebo technické dokumentace.

Nástroj se nespokojuje se syntaktickým parsingem: poskytuje cron vysvětlení v přirozeném jazyce, což z něj činí jak cron decoder, tak validátor plánování.

Klasické příklady cron expression

Níže uvedené vzorce pokrývají to podstatné z cron schedules nalezených v produkci. Všechny jsou validní na Linux crontab, Kubernetes CronJob, GitHub Actions a většině aplikačních plánovačů.

Výraz Lidské čtení
* * * * * Každou minutu
0 * * * * Každou hodinu přesně
0 0 * * * Každý den o půlnoci
0 0 * * 0 Každou neděli o půlnoci
*/15 * * * * Každých 15 minut
0 9 * * 1-5 9:00 od pondělí do pátku
0 0 1 * * 1. v každém měsíci o půlnoci
0 0,12 * * * O půlnoci a poledni každý den
*/5 9-17 * * 1-5 Každých 5 minut v pracovní době
30 2 1,15 * * 1. a 15. v měsíci ve 2:30

Pro provedení cron úlohy na Linux serveru editujeme uživatelský crontab ze shellu:

# editace crontabu aktuálního uživatele
$ crontab -e

# výpis existujících úloh
$ crontab -l

# příklad přidaného řádku: denní backup ve 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Příklad výstupu cron converteru pro */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 k cron decoderu

Jaký je rozdíl mezi UNIX cronem a Quartz?

UNIX/Vixie cron používá 5 polí (minuta až den-týdne), bez přesnosti na sekundu, a nemá nativní pojem "poslední den měsíce". Quartz (Java, Spring, AWS EventBridge) přidává sloupec sekundy na začátku, někdy sloupec rok na konci, a několik symbolů (?, L, W, #) chybějících v Linux crontabu. Quartz cron expression s 6 poli tedy není přímo přenosný do /etc/crontab, a obráceně. Náš cron decoder cílí na 5polový formát, který pokrývá většinu plánovačů.

Jak provést cron úlohu každých 5 minut?

S krokem / na poli minuty:

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

Tento crontab expression spouští skript v minutách 0, 5, 10, 15... každé hodiny, každý den. Pro omezení na pracovní hodiny od pondělí do pátku přidejte omezení na pole hodina a den-týdne: */5 9-17 * * 1-5.

Co znamená hvězdička (*) v cron expression?

Hvězdička znamená any value: matchuje všechny povolené hodnoty pole. V 0 0 * * * tři hvězdičky znamenají "jakýkoli den měsíce, jakýkoli měsíc, jakýkoli den týdne". V kombinaci se dvěma prvními poli pevně stanovenými na 0 získáme "každý den o půlnoci". Hvězdička se může také kombinovat s krokem: */15 v minutě = každých 15 minut.

Má crontab časové pásmo?

Výchozí časové pásmo serveru. Na Linux crontabu je to systémová TZ (často UTC na VPS a kontejnerech). GitHub Actions forsuje UTC. Kubernetes CronJob používá časové pásmo kontroléru, konfigurovatelné přes spec.timeZone od 1.27. AWS EventBridge vyhodnocuje výrazy v UTC. Aplikační plánovače (Symfony Scheduler, Quartz, Airflow) často umožňují stanovit dedikované časové pásmo pro každou úlohu. V případě pochybnosti ověřte date na cílovém serveru a porovnejte s výstupem cron converteru.

Cron job vs at příkaz: který vybrat?

cron slouží pro provedení opakující se úlohy podle plánu. at slouží pro provedení příkazu jednou v daný okamžik. Pro denní backup, rotaci logů nebo pravidelné API volání použijte cron. Pro odložení jednorázové operace ("spustit toto nasazení dnes večer ve 22h"), použijte at:

$ echo "/usr/local/bin/deploy.sh" | at 22:00
Jak otestovat cron expression bez spuštění?

To je přesně role tohoto cron converteru: počítá N dalších provedení od aktuálního okamžiku, bez spuštění jakéhokoli jobu. Hned vidíte, zda váš crontab expression tahá ve 03:00 jak je plánováno nebo ve 03:17 omylem. Pro jít dál před instalací úlohy můžete také otestovat samotný skript (bash -x script.sh) a ověřit syntaxi crontab souboru s crontab -T soubor na distribucích, které to podporují.

Co se stane, když jsou den-měsíce a den-týdne oba stanoveny?

Na Vixie cronu (Linux) je pravidlo logické NEBO: job tahá, pokud jedno nebo druhé ze dvou polí matchuje. Je to neintuitivní a zdroj bugů. Quartz používá A, odtud zavedení symbolu ? pro explicitní signalizaci "žádné omezení". Obecným pravidlem stanovte pouze jedno ze dvou polí.

Ukázka požadavku

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é Výchozí
cron string
number_next_date integer

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všechny dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/cron-converter - získá schéma tohoto nástroje
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - spustí tento nástroj s JSON payloadem