Preskoči na vsebino

Sintaksa cron izrazov

Cron izraz je pet polj, ki opisujejo, kdaj se nešto zažene. Vsako polje pove, katere vrednosti svoje enote so dovoljene, in oprava se zažene v vsaki minuti, kjer se vseh pet strinja. To je celi model: ni trajanja, ni »vsakih 90 minut« in nikjer se ne hrani naslednje stanje.

Polja se berejo levo v desno kot minuta, ura, dan v mesecu, mesec, dan v tednu. Primeri spodaj so tisti, po katerih ljudje res segajo, in vsak od njih pred gradnjo te strani obide svoj lastni cron parser te strani.

Zadnji razdelek navaja sintakso, ki izgleda kot cron vendar se tu ne sprejema: razširitve Quartza in Jenkinsa ter šestpolje z sekundami. Vredno je poznati, ker kopirani izraz, ki katere od njih uporablja, preprosto ne uspe.

Pet polj

7

Cron vrstica je pet polj ločenih z razmakom, nato pa ukaz. Vsako polje mora biti prisotno; nobeno se ne sme izpustiti.

IzrazObsegPomen
* * * * *min hod dom mes dowPet polj v vrstnem redu: minuta, ura, dan v mesecu, mesec, dan v tednuPet zvezdic pomeni vsako minuto vsakega dne — najdove prvi možen izraz.
minute0-59Prvo polje
hour0-23Drugo polje, v 24-urnem formatu
day of month1-31Tretje poljeDan, ki v danem mesecu ne obstaja, se preprosto preskoči — 31 se zažene sedemkrat na leto, ne dvanajstkrat.
month1-12Četrto polje
day of week0-7Peto polje, nedelja prvoNedelja je 0 in 7 — zato se obseg konča s sedmico namesto s šestko.
0 5 13 * 5Ko sta omejena obe polji dni, se cron zažene na katerikoli — ne na obehTo se zažene 13. in tudi vsak petek, zato ni »Petek 13.«. To je edino pravilo crona, ki preseneti vse.

Operatorji

10

Isti štiri operatorji delajo v vsakem polju; le obseg števil, ki jih sprejmejo, se spremeni.

IzrazObsegPomen
*Vsaka vrednost, ki jo polje dovoli
1,15,30Seznam posameznih vrednosti
9-17Obseg, vključena oba konca
*/15Vsaka n-ta vrednost preko celega polja*/15 v polju minut pomeni :00, :15, :30 in :45 — šteje se od dna obsega, ne od sedaj.
9-17/2Vsaka n-ta vrednost znotraj obsega
5/10Vsaka n-ta vrednost od začetne točke do konca polja
0,30 9-17 * * 1-5Operatorji se prosto kombinirajo v kateremkoli poljuNa polovico in polne ure, med devetimi in petimi, od ponedeljka do petka.
JAN-DEC1-12Imena mesecev, tri črke, neobčutljivo na velike črke
SUN-SAT0-6Imena dni, tri črke, neobčutljivo na velike črke
70Nedelja, napisana drugače

Krajevne okrajšave

7

Sedem imen, ki predstavljajo celoten izraz. Predstavljajo lastnost oblike crontab, ne slovnico — prikrajšek, ki bere cron nize, jih ne sme nujno sprejeti.

IzrazObsegPomen
@hourly0 * * * *Na začetku vsake ure
@daily0 0 * * *Enkrat na dan ob polnoči
@midnight0 0 * * *Isto kot @daily
@weekly0 0 * * 0Enkrat na teden, nedelja ob polnoči
@monthly0 0 1 * *Prvi v mesecu ob polnoči
@yearly0 0 1 1 *Prvega januarja ob polnoči
@annually0 0 1 1 *Isto kot @yearly

Primeri

14

Preberite ga od desne v levo, ko neha smisel: najbolj grobo polje je na desni in odloča, katere dni sploh bolj fina polja preverja.

IzrazObsegPomen
* * * * *Vsako minuto
*/5 * * * *Vsako pet minut
0 * * * *Vsako uro, na začetku ure
0,30 * * * *Vsako pol ure
0 3 * * *Vsak dan ob 03:00
0 9,17 * * *Dvakrat na dan, ob 09:00 in 17:00
*/15 9-17 * * 1-5Vsako četrt ure med delovnim časom v delovne dni
0 8 * * 1-5Delovni dnevi ob 08:00
0 10 * * 6,0Sobota in nedelja ob 10:00
30 7 * * MONPonedeljek ob 07:30
0 0 1 * *Polnoč prvega dne vsakega meseca
0 0 28-31 * *Vsak dan v zadnji части mesecaObičajni cron ne pozna »zadnjega dne meseca«. Ta se zažene do štirikrat; običajno rešitev je skript, ki preveri datum in se kmalu zaustavi.
0 0 1 1,4,7,10 *Polnoč prvega dne vsakega četrtletja
0 0 1 1 *Enkrat letno, ob začetku 1. januarja

Razširitve, ki jih ta stran ne sprejema

6

Dodajajo jih Quartz, Jenkins in nekateri oblačni prikrajšekniki. Navedeni so, da jih spoznate v tujega crontaba — parser na tej strani nobenega od njih ne sprejema, niti cron, ki se dobavi z Linuxom.

IzrazObsegPomen
?»Brez specifične vrednosti« v polju dneva, ki ga že omejuje drugo
LZadnji dan meseca ali zadnji dani dan v tednu
15WDelovni dan najbližji 15.
FRI#3Tretji petek v mesecu
*/30 * * * * *Šesto polje za sekunde, spredajŠest polj, ne pet. Quartz in več knjižnic to obliko uporabljata; datoteka crontab pa ne.
@rebootZaženi enkrat pri zagonu strojaResnično v crontabasu, vendar to ni urnik — ni naslednjega zagona, ki bi se dal izračunati, zato ga parser tukaj zavrne.

FAQ

Zakaj se je moja oprava »Petek 13.« izvršila vsak petek?
Ker sta obe polji — dan v mesecu in dan v tednu — omejena, cron jih obravnava kot ali-ali, ne in-ter. 0 5 13 * 5 se zažene 13. in tudi vsak petek. Pravi petek 13. zahteva preverjanje datuma v samem skriptu.
Ali */5 pomeni »o pet minut od sedaj«?
Ne. Koraki se štejejo od dna polja, ne od trenutka, ko namestite oprav, zato */5 v polju minut pomeni :00, :05, :10 in tako dalje — ne glede na to, kdaj je bila napisana.
Kaj časovni pas cron uporablja?
Sistemski, razen če crontab nastaviti CRON_TZ ali TZ na vrh. To je dvakrat na leto videti: oprava, načrtovana v uri, ki je preskočena med spremembo časa, se ne zažene in oprava v uri, ki se ponovi, se lahko zažene dvakrat.
Ali je 0 enako kot 7 v polju »dan v tednu«?
Da, oba pomenita nedeljo. Duplikat obstoja zato, da se obseg 1-7 pokrivajočih ponedeljek do nedelje lahko napiše naravno, kar polje 0-6 v enem obsegu ne more.
Kje lahko testiram izraz?
Cron parser na tej strani prevzame izraz in prikaže naslednje požige v navadnem jeziku, lokalno v vašem brskalniku. Orodje zraven se premika drugače: izberite urnik in izpiše izraz.