CRON výraz je speciální textový formát určený pro definici množiny časových okamžiků. Formát je to sice stručný, ale poměrně univerzální. Protože je velmi rozšířený, dávno se již nepoužívá pouze v Unixových nástrojích, ale lze na něj narazit takřka všude, kde se specifikuje čas spuštění nějaké úlohy.

Původ slova CRON je nejasný, ale zdá se, že je to zkratka slov "commands run over night", která se ujala i díky své podobnosti s řeckým slovem pro čas, což je χρόνος (chronos).

Standardní formát

Standardní CRON výraz se skládá z pěti částí, oddělených prázdným znakem (např. mezerou):

NázevPovolené hodnotyPovolené speciální znaky
minuty0-59, - *
hodiny0-23, - *
den v měsíci1-31, - * L W
měsíc1-12, - *
den v týdnu0-7 (0, 7 = neděle), - * ? L #

Význam speciálních znaků:

ZnakPopisPříklad
,více hodnot1,2,3 = 1 nebo 2 nebo 3
-rozsah hodnot1-5 pro dny v týdnu = pondělí až pátek
*zástupný symbol pro celý rozsah hodnot* pro minuty = 0-59
L pro den v měsíciposlední den v měsíci (28, 29, 30 nebo 31)L pro leden = 31
L pro den v týdnuposlední daný den v měsíci5L = poslední pátek v měsíci
Wnejbližší pracovní den3W = nejbližší pracovní den po třetím dni v měsíci
#X#Y znamená každé Y-té X, kde X je číslo dne v týdnu1#2 = každé druhé pondělí

Příklady

VýrazPopis
0 0 * * *každý den o půlnoci
0 9-18 * * *každý den každou hodinu od 9 do 18
30 22 * * Mon,Tue,Wed,Thu,Frikaždý pracovní den v 22:30
15 6 2 1 *2. ledna v 6:15

Rozšíření

Názvy dnů a měsíců

V některých implementacích lze místo čísla měsíce používat zkratky JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC a místo čísla dne v týdnu zkratky SUN, MON, TUE, WED, THU, FRI, SAT.

FreeBSD zkratky

FreeBSD systémy podporují další zkratky:

ZkratkaVýznamPřeklad
@rebootspustit při startu CRON démona(nelze zapsat pomocí CRON výrazu)
@yearly nebo @annuallyjednou ročně (1. ledna)0 0 1 1 *
@monthlyjednou měsíčně (první den v daném měsíci)0 0 1 * *
@weeklyjednou týdně (v neděli)0 0 * * 0
@daily nebo @dailyjednou denně (o půlnoci)0 0* * *
@hourlyjednou za hodinu0 * * * *
@every_minutejednou za minutu*/1 * * * *
@every_secondjednou za sekundu(nelze zapsat pomocí CRON výrazu)

Rok

Některé implementace umožňují přidat rok na konec výrazu jako jeho šestou část:

NázevPovolené hodnotyPovolené speciální znaky
rok1970-2099, - *

Inkrementy

Některé implementace umožňují definovat hodnoty jako inkrementy pomocí lomítka (/). Zápis ve tvaru x/y znamená €x, x+y, x+2y, x+3y, \ldots€ až do maximálního rozsahu daného pole. Například 0/15 znamená 0,15,30,45, 4/20 znamená 4,24,44. Hvězdička před lomítkem se chová jako nula.

Quartz Scheduler

Quartz Scheduler je velmi oblíbenou knihovnou pro plánování úloh, například v jazyce Java. Specifikuje však vlastní formát CRON výrazů, který jde nad rámec standardního formátu.

Quartz CRON výraz se skládá ze šesti až sedmi částí:

NázevPovinnéPovolené hodnotyPovolené speciální znaky
sekundyano0-59, - * /
minutyano0-59, - * /
hodinyano0-23, - * /
den v měsíciano1-31, - * / L W
měsícano1-12 nebo JAN-DEC, - * /
den v týdnuano1-7 nebo SUN-SAT, - * / L #
rokne1970-2099, - * /

Stejné speciální znaky mají stejný význam, jako ve standardních výrazech.

Příklady

VýrazPopis
0 0 0 * * ?každý den o půlnoci
0 15 10 * * ? 2001každý den roku 2001 v 10:15
0 30 8 ? * 6#3každý třetí pátek v měsíci v 8:30

Reference