Utilia

Generator cron izraza

Izgradi cron izraz polje po polje, pročitaj ga običnim rečima, vidi sledeća izvršavanja u bilo kojoj vremenskoj zoni i pretvori ga u systemd, Quartz ili AWS.

Graditelj

PoljeRežimVrednost
Minut0–59
Sat0–23
Dan u mesecu1–31, L
Mesec1–12 ili JAN–DEC
Dan u nedelji0–7 (0 i 7 = nedelja) ili SUN–SAT

Kako da izgradiš cron izraz

  1. Upiši ili nalepi izraz u Cron izraz ili izaberi jedan iz Gotova podešavanja. Prihvataju se i makroi poput @daily ili @weekly.
  2. Ili koristi Graditelj: za svako polje izaberi Režim (Svaki, Svakih N, Određene vrednosti, Opseg ili Prilagođeno) i popuni Vrednost. Izraz se menja dok radiš, a izmena izraza menja graditelj.
  3. Označi Dodaj polje za sekunde (6 polja) ako tvoj planer podržava sekunde.
  4. Pročitaj raspored u odeljku Običnim rečima (na jeziku stranice kad to biblioteka za opis podržava), pa proveri listu Sledeća izvršavanja. Izaberi Vremenska zona servera koji izvršava zadatak i Koliko izvršavanja da se prikaže.
  5. Kopiraj izraz dugmetom Kopiraj ili koristi neki od formata iz odeljka Drugi formati.

Greške se objašnjavaju polje po polje, na primer „Minut: 61 je van opsega (0–59)“, pa tačno znaš šta da ispraviš.

Pet cron polja

Standardni (Vixie) cron red ima pet polja, pa komandu:

Polje Dozvoljene vrednosti
Minut 0–59
Sat 0–23
Dan u mesecu 1–31
Mesec 1–12 ili JAN–DEC
Dan u nedelji 0–7 (0 i 7 su nedelja) ili SUN–SAT

Svako polje prihvata * (svaku vrednost), listu 1,15, opseg 9-17, korak */15 (svakih 15 jedinica) ili opseg sa korakom 0-30/10. Tako */15 9-17 * * 1-5 znači svakih 15 minuta od 9:00 do 17:45, od ponedeljka do petka.

Jedno pravilo mnoge iznenadi: kad su ograničeni i Dan u mesecu i Dan u nedelji, klasični cron se izvršava kad se poklopi bilo koji od njih. 0 0 13 * 5 se izvršava svakog 13. i svakog petka, a ne samo petkom 13. U tom slučaju alat prikazuje upozorenje.

Sledeća vremena izvršavanja i vremenske zone

Cron koristi sat mašine ili podešavanje CRON_TZ/TZ u crontabu. Lista Sledeća izvršavanja računa se za vremensku zonu koju izabereš, uključujući promene letnjeg računanja vremena: pri prolećnoj promeni zadatak podešen na 2:30 može biti preskočen, a u jesen se, zavisno od implementacije, može izvršiti jednom ili dvaput. Za zadatke koji moraju da se izvrše tačno jednom, radije biraj vreme van intervala 1:00–3:00 ili koristi UTC.

Vixie cron, systemd tajmeri, Quartz i AWS

  • systemd tajmeri koriste OnCalendar= sa drugačijom sintaksom: Mon..Fri *-*-* 09..17:00/15:00. Uslovi za dan u nedelji i datum kombinuju se sa I, a ne sa ILI, pa neki cron izrazi nemaju tačan ekvivalent.
  • Quartz i Spring stavljaju polje za sekunde na početak i mogu dodati polje za godinu. Jedno od dva polja za dan mora biti ?, a Quartz numeriše dane u nedelji od 1 do 7 počevši od nedelje, za razliku od cronovog 0–6. Alat zapisuje dane u nedelji imenima (MON-FRI) da bi izbegao tu zamku.
  • AWS EventBridge koristi cron(minuti sati dan mesec dan-u-nedelji godina): šest polja, bez sekundi, sa ? u jednom polju za dan i godinom na kraju.

Standardni cron nema polje za sekunde. Oblik sa 6 polja i sekundama podržavaju mnoge biblioteke (node-cron, Spring, Quartz), ali ne i sistemski crontab.

Česta pitanja

Kako da pokrenem zadatak svakih 5 minuta?

Koristi */5 * * * *. Zadatak se izvršava u minutima 0, 5, 10… svakog sata.

Kako da pokrenem zadatak poslednjeg dana u mesecu?

Mnogi planeri prihvataju L u polju dana u mesecu: 0 18 L * *. Sa običnim Vixie cronom, izvršavaj svakog dana od 28. do 31. i u skripti proveri da li je sutra prvi.

Šta radi @reboot?

Izvršava komandu jednom, kad se pokrene cron daemon. Nema raspored, pa alat ne može da navede vremena izvršavanja za njega.

Zašto se moj zadatak ne izvršava u prikazano vreme?

Proveri vremensku zonu servera, korisnikov crontab naspram /etc/crontab (koji ima dodatno polje za korisnika) i PATH: cron se pokreće sa minimalnim okruženjem.

Da li je nedelja 0 ili 7?

Oba. U polju dana u nedelji 0 i 7 znače nedelju, 1 je ponedeljak, a 6 subota.