Přeskočit na obsah

Syntaxe cron výrazů

Cron výraz je pět polí, která popisují, kdy se má něco spustit. Každé pole říká, které hodnoty své jednotky jsou přípustné, a úloha se spustí v každé minutě, kdy se všech pět shoduje. To je celý model: neexistuje doba trvání, neexistuje "každých 90 minut" a nikde se neuchováva stav dalšího spuštění.

Pole se čtou zleva doprava jako minuta, hodina, den v měsíci, měsíc, den v týdnu. Příklady dole jsou ty, které lidé opravdu používají, a každý z nich je již projít vlastním cron parserem této stránky před výstavbou.

Poslední sekce uvádí syntaxi, která vypadá jako cron, ale zde se nepřijímá: rozšíření Quartzu a Jenkinsu a šestipolová forma se sekundami. Stojí za to je znát, protože zkopírovaný výraz, který některé z nich používá, prostě selže.

Pět polí

7

Cron řádek je pět polí oddělených mezerou a pak příkaz. Každé pole musí být přítomné; žádné nelze vynechat.

VýrazRozsahVýznam
* * * * *min hod dom mes dowPět polí v pořadí: minuta, hodina, den v měsíci, měsíc, den v týdnuPět hvězd znamená každou minutu každého dne — nejvolnější výraz vůbec.
minute0-59První pole
hour0-23Druhé pole, 24hodinový formát
day of month1-31Třetí poleDen, který v daném měsíci neexistuje, se prostě přeskočí — 31 se spustí sedmkrát ročně, ne dvanáctkrát.
month1-12Čtvrté pole
day of week0-7Páté pole, neděle nejdříveNeděli znamená 0 i 7 — proto rozsah jde do sedmi, ne šesti.
0 5 13 * 5Když jsou obě pole dne omezena, cron se spustí na kterékoli — ne oběToto běží na 13. a také každý pátek, takže to není "pátek 13.". Je to jediné pravidlo cronu, které překvapí každého.

Operátory

10

Stejné čtyři operátory fungují v každém poli; mění se pouze rozsah čísel, která přijímají.

VýrazRozsahVýznam
*Každá hodnota, kterou pole povoluje
1,15,30Seznam jednotlivých hodnot
9-17Rozsah včetně obou konců
*/15Každá n-tá hodnota v celém poli*/15 v poli minut znamená :00, :15, :30 a :45 — počítá se od začátku rozsahu, ne od teď.
9-17/2Každá n-tá hodnota v rozsahu
5/10Každá n-tá hodnota od počátečního bodu do konce pole
0,30 9-17 * * 1-5Operátory se volně kombinují v kterémkoliv poliKaždou a půl hodinu, mezi devítou a pátou, pondělí až pátek.
JAN-DEC1-12Názvy měsíců, tři písmena, bez rozdílu velikosti
SUN-SAT0-6Názvy dní, tři písmena, bez rozdílu velikosti
70Neděle, zapsaná druhým způsobem

Zkrácená makra

7

Sedm jmen, která nahrazují celý výraz. Jsou to pohodlí formátu crontab, ne gramatika polí — plánovač čtoucí cron řetězce je nemusí přijímat.

VýrazRozsahVýznam
@hourly0 * * * *Na vrcholu každé hodiny
@daily0 0 * * *Jednou denně v půlnoci
@midnight0 0 * * *Totéž jako @daily
@weekly0 0 * * 0Jednou týdně, neděle v půlnoci
@monthly0 0 1 * *Prvního dne měsíce v půlnoci
@yearly0 0 1 1 *Prvního ledna v půlnoci
@annually0 0 1 1 *Totéž jako @yearly

Příklady

14

Čtěte je zprava doleva, když to ztrácí smysl: nejhrubší pole je vpravo a rozhoduje, které dny se vůbec jemných polí vyhodnocují.

VýrazRozsahVýznam
* * * * *Každou minutu
*/5 * * * *Každých pět minut
0 * * * *Každou hodinu, na její začátku
0,30 * * * *Každou půl hodinu
0 3 * * *Každý den v 03:00
0 9,17 * * *Dvakrát denně, v 09:00 a 17:00
*/15 9-17 * * 1-5Každých čtvrt hodiny během pracovní doby v pracovní dny
0 8 * * 1-5Pracovní dny v 08:00
0 10 * * 6,0Sobota a neděle v 10:00
30 7 * * MONPondělí v 07:30
0 0 1 * *Půlnoc prvního dne měsíce
0 0 28-31 * *Každý den v poslední části měsíceStandardní cron nemá "poslední den měsíce". Toto se spustí až čtyřikrát; obvyklá oprava je skript, který si zkontroluje datum a skončí.
0 0 1 1,4,7,10 *Půlnoc prvního dne každého čtvrtletí
0 0 1 1 *Jednou za rok, na začátku 1. ledna

Rozšíření, která tato stránka nepřijímá

6

Quartz, Jenkins a některé cloudové plánovače je přidávají. Jsou zde uvedena, abyste je poznali v cizím crontabu — parser na této stránce každý odmítá, stejně jako cron dodávaný se systémem Linux.

VýrazRozsahVýznam
?"Žádná konkrétní hodnota" v poli dne, kterou už omezuje ten druhý
LPoslední den měsíce nebo poslední daný den v týdnu
15WPracovní den nejbližší 15.
FRI#3Třetí pátek v měsíci
*/30 * * * * *Šesté pole pro sekundy, vpředuŠest polí, ne pět. Quartz a několik knihoven to používají; soubor crontab ne.
@rebootSpustit jednou při startu strojeOpravdu v crontabu, ale není to plán — neexistuje další spuštění k výpočtu, proto jej parser zde odmítá.

Časté dotazy

Proč se můj job "pátek 13." spustil každý pátek?
Protože když jsou omezena obě pole — den v měsíci a den v týdnu — cron je bere jako nebo, ne a zároveň. 0 5 13 * 5 se spustí 13. a také každý pátek. Skutečný pátek 13. vyžaduje kontrolu data v samotném skriptu.
Znamená */5 "za pět minut od teď"?
Ne. Kroky se počítají od začátku rozsahu pole, ne od chvíle, kdy instalujete úlohu, takže */5 v poli minut znamená :00, :05, :10 a tak dále — bez ohledu na to, kdy byl výraz zapsán.
Jaké časové pásmo cron používá?
Systémové, pokud crontab nahoře nenastaví CRON_TZ nebo TZ. To se stane dvakrát ročně: úloha naplánovaná v hodině, kterou skočí přechod na letní čas, se nespustí, a úloha v hodině, která se opakuje, se může spustit dvakrát.
Je 0 totéž co 7 v poli dne v týdnu?
Ano, oba znamenají neděli. Duplikát existuje, aby se rozsah 1–7 pokrývající pondělí až neděli dal psát přirozeně, což pole 0–6 jedním rozsahem nevyjádří.
Kde si mohu výraz otestovat?
Cron parser na této stránce vezme výraz a zobrazí příští spuštění v běžném jazyce, místně v prohlížeči. Nástroj vedle jde opačným směrem: vyberte si plán a zapíše výraz.