Utilia

Generator cron izraza

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

Graditelj

PoljeNačinVrijednost
Minuta0–59
Sat0–23
Dan u mjesecu1–31, L
Mjesec1–12 ili JAN–DEC
Dan u sedmici0–7 (0 i 7 = nedjelja) ili SUN–SAT

Kako izraditi cron izraz

  1. Upiši ili zalijepi izraz u Cron izraz ili odaberi jedan iz Postavki. Prihvataju se i makroi poput @daily ili @weekly.
  2. Ili koristi Graditelj: za svako polje odaberi Način (Svaki, Svakih N, Određene vrijednosti, Raspon ili Prilagođeno) i popuni Vrijednost. Izraz se ažurira dok radiš, a izmjena izraza ažurira graditelj.
  3. Označi Dodaj polje za sekunde (6 polja) ako tvoj planer podržava sekunde.
  4. Pročitaj raspored Običnim riječima, pa provjeri listu Sljedeća izvršavanja. Odaberi Vremensku zonu servera koji izvršava zadatak i Koliko izvršavanja treba prikazati.
  5. Kopiraj izraz dugmetom Kopiraj ili koristi neki od Drugih formata.

Opis rasporeda običnim riječima generiše se pomoću hrvatske jezične postavke biblioteke cronstrue, jer za bosanski ne postoji vlastita, pa se može razlikovati od uobičajenih bosanskih izraza. Datumi sljedećih izvršavanja prikazuju se prema jeziku stranice.

Greške se objašnjavaju polje po polje, na primjer „Minuta: 61 je izvan raspona (0–59)“, pa tačno znaš šta treba ispraviti.

Pet cron polja

Standardni (Vixie) cron red ima pet polja, a zatim naredbu:

Polje Dozvoljene vrijednosti
Minuta 0–59
Sat 0–23
Dan u mjesecu 1–31
Mjesec 1–12 ili JAN–DEC
Dan u sedmici 0–7 (0 i 7 su nedjelja) ili SUN–SAT

Svako polje prihvata * (svaka vrijednost), listu 1,15, raspon 9-17, korak */15 (svakih 15 jedinica) ili raspon s korakom 0-30/10. Tako */15 9-17 * * 1-5 znači svakih 15 minuta od 9:00 do 17:45, od ponedjeljka do petka.

Jedno pravilo mnoge iznenadi: kad su ograničeni i Dan u mjesecu i Dan u sedmici, klasični cron se izvršava kad odgovara 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.

Sljedeća izvršavanja i vremenske zone

Cron koristi sat mašine ili postavku CRON_TZ/TZ u crontabu. Lista Sljedeća izvršavanja računa se za vremensku zonu koju odabereš, uključujući promjene ljetnog računanja vremena: pri proljetnoj promjeni zadatak postavljen 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 se moraju izvršiti tačno jednom radije biraj vrijeme izvan intervala 1:00–3:00 ili koristi UTC.

Vixie cron, systemd tajmeri, Quartz i AWS

  • systemd tajmeri koriste OnCalendar= s drugačijom sintaksom: Mon..Fri *-*-* 09..17:00/15:00. Uslovi za dan u sedmici i datum kombinuju se s AND, a ne OR, pa neki cron izrazi nemaju tačan ekvivalent.
  • Quartz i Spring stavljaju polje za sekunde na prvo mjesto i mogu dodati polje za godinu. Jedno od dva polja za dan mora biti ?, a Quartz numeriše dane u sedmici od 1 do 7 počevši od nedjelje, za razliku od crona (0–6). Alat zapisuje dane u sedmici kao nazive (MON-FRI) da izbjegne tu zamku.
  • AWS EventBridge koristi cron(minute sati dan mjesec dan-u-sedmici godina): šest polja, bez sekundi, ? u jednom polju za dan i godinu 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 pokrenuti zadatak svakih 5 minuta?

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

Kako pokrenuti zadatak posljednjeg dana u mjesecu?

Mnogi planeri prihvataju L u polju dana u mjesecu: 0 18 L * *. S običnim Vixie cronom izvršavaj svakodnevno na dane 28–31 i u skripti provjeri je li sutra prvi.

Šta radi @reboot?

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

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

Provjeri vremensku zonu servera, korisnički crontab naspram /etc/crontab (koji ima dodatno polje za korisnika) i PATH: cron se pokreće s minimalnim okruženjem.

Je li nedjelja 0 ili 7?

Oba. U polju dana u sedmici 0 i 7 znače nedjelju, 1 je ponedjeljak, a 6 subota.