Cron
Analyzátor výrazů cron
Přečtěte si plán cronu srozumitelně a zjistěte, kdy poběží příště.
Pět polí: minuta, hodina, den v měsíci, měsíc, den v týdnu. Šesté pole na začátku se čte jako sekundy.
O výrazech cron
Výraz cron tvoří pět polí, která popisují, kdy se má úloha spustit: minuta, hodina, den v měsíci, měsíc a den v týdnu. Každé pole přijímá číslo, seznam, rozsah nebo krok jako */15. Jsou úsporné, ale snadno se čtou špatně — zvlášť obě pole pro den, jejichž kombinaci většina lidí odhadne obráceně. Vidět plán vypsaný slovy a s daty proto bývá rychlejší než si ho odvozovat.
Kromě pěti číselných polí přijímá většina implementací cronu — včetně parseru, který stojí za tímto nástrojem — také třípísmenné názvy měsíců a dnů v týdnu (JAN, MON) místo čísel a hrstku zkratek jako @daily, @hourly a @weekly, které se rozvinou na odpovídající číselný výraz. Existují čistě kvůli čitelnosti; @daily a „0 0 * * *“ naplánují úplně stejně. Ne každá implementace cronu ale podporuje každou zkratku, takže než se na ni v produkci spolehnete, ověřte si dokumentaci svého konkrétního plánovače.
Kde se s tím setkáte
- Kontrola řádku v crontabu před nasazením na server
- Čtení plánu v Kubernetes CronJobu nebo v CI pipeline
- Zjišťování, proč se noční úloha spustila v nečekanou hodinu
- Psaní nového plánu záloh nebo úklidu od nuly
Často kladené otázky
Co se stane, když zadám den v měsíci i den v týdnu zároveň?
Spojí se pomocí OR, nikoli AND — úloha se spustí, jakmile platí kterákoli z podmínek. Výraz „0 0 13 * 5“ tedy poběží 13. každého měsíce a každý pátek, ne jen v pátek třináctého. Je to zdaleka nejčastější chyba v cronu.
V jakém časovém pásmu jsou uvedené časy?
V UTC. Skutečné plánovače používají pásmo stroje nebo definice úlohy, takže běží-li váš server v místním čase, budou se skutečná spuštění posouvat. Než se na zde uvedenou hodinu spolehnete, ověřte nastavení plánovače.
Podporují se výrazy s pěti i šesti poli?
Ano. Pět polí odpovídá standardnímu unixovému cronu, který začíná minutami. Šesté pole na začátku přidává sekundy — takový formát očekávají Quartz, Spring a několik knihoven pro úlohy.
Můžu napsat @daily nebo MON místo čísel?
Ano. Třípísmenné názvy měsíců a dnů v týdnu (JAN, MON a podobně) i zkratky jako @daily, @hourly a @weekly jsou zde přijímány a rozvinou se na odpovídající číselná pole — @daily je totožné s „0 0 * * *“. Jsou široce, ale ne univerzálně podporovány: některé minimalistické nebo vestavěné implementace cronu přijímají jen čistě pětipolní číselný tvar, takže se vyplatí ověřit dokumentaci vašeho skutečného plánovače, než se v produkci na zkratku spolehnete.