Jak číst cron výraz pole po poli
Výraz cron je krátký řádek textu, který plánovači úloh říká, kdy má úlohu spustit. Obvyklý tvar má pět polí oddělených mezerami: minuta, hodina, den v měsíci, měsíc a den v týdnu. Řádek 0 9 * * 1-5 znamená 09:00 od pondělí do pátku. Každé pole je číslo, název, seznam, rozsah nebo krok, nebo * pro každou hodnotu. Úloha se spustí v každém čase, kdy se shodují všechna pole.
Pět polí
| Pole | Povolené hodnoty | Příklad |
|---|---|---|
| Minuta | 0 až 59 | 30 je 30. minuta hodiny |
| Hodina | 0 až 23 | 9 je 09:00, ve 24hodinovém formátu |
| Den v měsíci | 1 až 31 | 15 je 15. den |
| Měsíc | 1 až 12, nebo JAN až DEC | 3 nebo MAR je březen |
| Den v týdnu | 0 až 6, nebo SUN až SAT | 0 nebo SUN je neděle, 1 je pondělí |
Některé systémy přijímají i 7 pro neděli, ale ne všechny, takže použijte 0 nebo SUN. Cron v tomto tvaru nemá pole pro sekundy, takže nejmenší krok je jedna minuta.
Seznamy, rozsahy, kroky a názvy
znamená každou hodnotu v poli.* * * *se spouští každou minutu.- Seznam používá čárky.
0 9,17 * * *se spouští každý den v 09:00 a v 17:00. - Rozsah používá pomlčku.
1-5v poli dne v týdnu znamená pondělí až pátek. - Krok používá lomítko.
*/15v poli minut znamená 0, 15, 30 a 45.10-30/5znamená 10, 15, 20, 25 a 30. - Názvy, například
MON-FRI, mohou nahradit čísla. Jsou čitelnější, pokud je plánovač přijímá.
Tyto části lze kombinovat. 0 8-18/2 * * * se spouští v minutě 0 každé druhé hodiny od 08:00 do 18:00.
Běžné časové plány
| Výraz | Význam |
|---|---|
* * * * * | Každou minutu |
/15 * * * | Každých 15 minut |
0 * * * * | V minutě 0 každé hodiny |
0 2 * * * | Každý den ve 02:00 |
0 9 * * 1-5 | 09:00, pondělí až pátek |
0 9,17 * * * | 09:00 a 17:00 každý den |
30 6 1 * * | 06:30 prvního dne každého měsíce |
0 0 * * 0 | Půlnoc každou neděli |
0 0 1 1 * | Půlnoc 1. ledna |
/5 9-17 * 1-5 | Každých 5 minut od 09:00 do 17:55, pondělí až pátek |
Všimněte si, že 0 0 * * je půlnoc a 0 12 * * je poledne. Špatně zadaná hodina patří k nejčastějším chybám.
Den v měsíci a den v týdnu
Pokud jsou omezena obě pole, den v měsíci i den v týdnu, úloha se spustí, když se shodne kterékoli z nich. Toto je klasické pravidlo v Vixie cronu a mnoha systémech z něj odvozených. Takže 0 0 13 * 5 se spustí o půlnoci 13. dne každého měsíce a také každý pátek. Lidé často čekají jen pátek 13., a dostanou víc spuštění, než plánovali.
Pokud je jedno z obou polí *, počítá jen to druhé. Chcete-li spustit úlohu v pátek 13., naplánujte ji na každý pátek a datum zkontrolujte uvnitř skriptu. Jiné plánovače, včetně některých cloudových služeb, mohou používat jiná pravidla, proto si přečtěte jejich dokumentaci.
Časová pásma a letní čas
Cron běží podle hodin stroje nebo služby, na které běží, což je obvykle místní časové pásmo tohoto stroje. Úloha nastavená na 02:30 se spustí v 02:30 podle těchto hodin. Nejprve zkontrolujte pásmo (v Linuxu ukáže příkaz date). Chcete-li, aby úlohy všude sledovaly jedny hodiny, mnoho týmů provozuje servery v UTC a některé plánovače umožňují nastavit časové pásmo pro každou úlohu.
Letní čas mění hodiny dvakrát ročně. Na jaře mnoho míst přeskočí z 02:00 rovnou na 03:00, takže úloha naplánovaná na 02:30 nemá čas se spustit. Na podzim se hodina od 01:00 do 01:59 objeví dvakrát. Plánovače tyto případy řeší různě. Některé úlohu přeskočí, některé ji spustí jednou a některé dvakrát. Pokud na tom záleží, držte úlohy mimo časové okno ranní změny nebo použijte UTC.
Šest polí a Quartz
Některé plánovače přidávají pole pro sekundy na začátek, takže /10 * * * * se spouští každých 10 sekund. Plánovač Quartz pro Javu používá sekundy, minuty, hodiny, den v měsíci, měsíc, den v týdnu a volitelný rok. Přidává čtyři speciální znaky:
?znamená „bez konkrétní hodnoty“. Quartz vyžaduje jeho použití v poli dne v měsíci nebo dne v týdnu, podle toho, které z nich nenastavujete.Lznamená poslední.Lv poli dne v měsíci je poslední den měsíce a6Lv poli dne v týdnu je poslední pátek.Wznamená nejbližší pracovní den.15Wje pracovní den nejblíž 15. dni a nepřeskočí do jiného měsíce.#znamená n-tý daný den v týdnu.6#3je třetí pátek.
Quartz čísluje dny jinak než pětipolový tvar. Jeho 1 je neděle a 7 je sobota, takže pondělí až pátek je 2-6, ne 1-5. Než něco zkopírujete, vždy ověřte, jaký formát váš plánovač používá.
Časté chyby
*/7v poli minut. Hodnoty jsou 0, 7, 14 a tak dále až do 56. Další by byla 63, což neexistuje, takže následující spuštění je v minutě 0 další hodiny. Mezera je jen čtyři minuty a rozestupy jsou nerovnoměrné. Použijte krok, který dělí 60 beze zbytku, například 5, 10, 15 nebo 30.- Únor 30. Takové datum neexistuje, takže
0 0 30 2 *se nikdy nespustí. Totéž platí pro 31. den v měsíci, který má 30 dní. Podle pravidla „buď-nebo“ může omezení dne v týdnu způsobit spuštění i v jiné dny, proto výsledek zkontrolujte. - Hodina 24 nebo minuta 60. Jsou mimo rozsah. Většina plánovačů je odmítne už při uložení, ale ne všechny.
- Očekávání sekund. Řádek s pěti poli se spouští jen v celých minutách.
- Záměna cronu s regulárními výrazy. V cronu
znamená každou hodnotu. V regulárním výrazuznamená opakovat předchozí položku. Vzory ověřujte v testeru regulárních výrazů a řádky cronu držte odděleně.
Zkontrolujte další spuštění
Než se na plán spolehnete, přečtěte řádek obyčejnými slovy a vypište si několik jeho nejbližších časů spuštění. Vysvětlovač cron výrazů dělá obojí a je to nejrychlejší způsob, jak odhalit pravidlo „buď-nebo“ nebo neobvyklý krok.
Rychlé odpovědi
Je první pole minuty, nebo sekundy?
Minuty, ve standardním tvaru s pěti poli. Jen některé plánovače se šesti poli přidávají sekundy, a ty je řadí na první místo.
Proč se moje úloha spouští v pátek i třináctého?
Pole dne v měsíci i dne v týdnu jsou obě nastavená, takže se úloha spustí, když se shoduje kterékoli z nich. Pokud chcete jen jedno z nich, nastavte druhé na *.
Používá cron UTC?
Jen pokud je stroj nebo služba nastavena na UTC. Jinak používá místní časové pásmo daného systému.
Přeloženo z Anglický originál s pomocí AI.
Komentáře
Zatím žádné komentáře. Buďte první.


