Utilia

Generator izrazov cron

Sestavi izraz cron po poljih, preberi ga v navadnih besedah, oglej si naslednje zagone v poljubnem časovnem pasu in ga pretvori v systemd, Quartz ali AWS.

Graditelj

PoljeNačinVrednost
Minuta0–59
Ura0–23
Dan v mesecu1–31, L
Mesec1–12 ali JAN–DEC
Dan v tednu0–7 (0 in 7 = nedelja) ali SUN–SAT

Kako sestaviti izraz cron

  1. Vnesi ali prilepi izraz v Izraz cron ali izberi enega iz Prednastavitve. Sprejeti so tudi makri, kot sta @daily ali @weekly.
  2. Ali pa uporabi Graditelj: za vsako polje izberi Način (Vsak, Vsakih N, Določene vrednosti, Obseg ali Po meri) in izpolni Vrednost. Izraz se sproti posodablja, urejanje izraza pa posodobi graditelja.
  3. Označi Dodaj polje sekund (6 polj), če tvoj razporejevalnik podpira sekunde.
  4. Preberi razpored V besedah (opis je v slovenščini) in nato preveri seznam Naslednji zagoni. Izberi Časovni pas strežnika, ki izvaja opravilo, in Koliko zagonov naj se izpiše.
  5. Izraz kopiraj z gumbom Kopiraj ali uporabi enega od Drugi zapisi.

Napake so razložene po poljih, na primer »Minuta: 61 je izven obsega (0–59)«, zato točno veš, kaj popraviti.

Pet polj cron

Standardna vrstica cron (Vixie) ima pet polj, nato ukaz:

Polje Dovoljene vrednosti
Minuta 0–59
Ura 0–23
Dan v mesecu 1–31
Mesec 1–12 ali JAN–DEC
Dan v tednu 0–7 (0 in 7 sta nedelja) ali SUN–SAT

Vsako polje sprejme * (vsaka vrednost), seznam 1,15, obseg 9-17, korak */15 (vsakih 15 enot) ali obseg s korakom 0-30/10. Tako */15 9-17 * * 1-5 pomeni vsakih 15 minut od 9:00 do 17:45, od ponedeljka do petka.

Eno pravilo marsikoga preseneti: kadar sta omejena tako Dan v mesecu kot Dan v tednu, se klasični cron zažene, ko se ujema katerikoli od njiju. 0 0 13 * 5 se zažene vsak 13. in vsak petek, ne le na petek 13. Orodje v takem primeru prikaže opozorilo.

Časi naslednjih zagonov in časovni pasovi

Cron uporablja uro računalnika ali nastavitev CRON_TZ/TZ v crontabu. Seznam Naslednji zagoni je izračunan za izbrani časovni pas, vključno s prehodi na poletni in zimski čas: ob spomladanskem prehodu je lahko opravilo, nastavljeno na 2:30, preskočeno, jeseni pa se glede na izvedbo zažene enkrat ali dvakrat. Za opravila, ki se morajo izvesti natanko enkrat, raje izberi čase izven 1:00–3:00 ali uporabi UTC.

Vixie cron, časovniki systemd, Quartz in AWS

  • Časovniki systemd uporabljajo OnCalendar= z drugačno sintakso: Mon..Fri *-*-* 09..17:00/15:00. Pogoja za dan v tednu in datum se združujeta z IN, ne z ALI, zato nekateri izrazi cron nimajo natančne enakovrednice.
  • Quartz in Spring na prvo mesto postavita polje sekund in lahko dodata polje leta. Eno od polj za dan mora biti ?, Quartz pa dneve v tednu šteje od 1 do 7 od nedelje, drugače kot cron z 0–6. Orodje zato dneve v tednu zapiše z imeni (MON-FRI), da se izogne tej pasti.
  • AWS EventBridge uporablja cron(minute ure dan mesec dan-v-tednu leto): šest polj, brez sekund, ? v enem od polj za dan in leto na koncu.

Standardni cron nima polja sekund. Šestpoljno obliko s sekundami podpirajo številne knjižnice (node-cron, Spring, Quartz), sistemski crontab pa ne.

Pogosta vprašanja

Kako zaženem opravilo vsakih 5 minut?

Uporabi */5 * * * *. Opravilo se zažene ob minutah 0, 5, 10 … vsake ure.

Kako zaženem opravilo zadnji dan v mesecu?

Številni razporejevalniki sprejmejo L v polju dan v mesecu: 0 18 L * *. Pri čistem Vixie cronu opravilo zaženi vsak dan med 28. in 31. ter v skriptu preveri, ali je jutri 1. v mesecu.

Kaj naredi @reboot?

Ukaz zažene enkrat, ko se zažene demon cron. Nima razporeda, zato orodje zanj ne more izpisati časov zagona.

Zakaj se moje opravilo ne zažene ob prikazanem času?

Preveri časovni pas strežnika, crontab uporabnika v primerjavi z /etc/crontab (ki ima dodatno polje za uporabnika) in PATH: cron se zažene z minimalnim okoljem.

Ali je nedelja 0 ali 7?

Oboje. V polju dan v tednu 0 in 7 pomenita nedeljo, 1 je ponedeljek, 6 pa sobota.