Utilia

Cron generator izraza

Izradi cron izraz polje po polje, pročitaj ga običnim riječima, vidi sljedeća pokretanja 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 tjednu0–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 Predlošci. Prihvaćaju se i makronaredbe poput @daily ili @weekly.
  2. Ili upotrijebi Graditelj: za svako polje odaberi Način (Svaki, Svakih N, Određene vrijednosti, Raspon ili Prilagođeno) i ispuni Vrijednost. Izraz se osvježava usput, a uređivanje izraza osvježava graditelj.
  3. Označi Dodaj polje sekundi (6 polja) ako tvoj planer podržava sekunde.
  4. Pročitaj raspored Običnim riječima (na jeziku stranice kad ga biblioteka za opis podržava, inače na engleskom), zatim provjeri popis Sljedeća pokretanja. Odaberi Vremenska zona poslužitelja na kojem se zadatak izvodi i Koliko pokretanja popisati.
  5. Kopiraj izraz gumbom Kopiraj ili upotrijebi jedan od Ostali formati.

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

Pet cron polja

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

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

Svako polje prihvaća * (svaka vrijednost), popis 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 tjednu, klasični cron pokreće zadatak kad se podudara bilo koje od to dvoje. 0 0 13 * 5 izvodi se svakog 13. i svakog petka, a ne samo petkom 13. U tom slučaju alat prikazuje upozorenje.

Vremena sljedećih pokretanja i vremenske zone

Cron koristi sat računala ili postavku CRON_TZ/TZ u crontabu. Popis Sljedeća pokretanja izračunava 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, ovisno o implementaciji, može izvršiti jednom ili dvaput. Za zadatke koji se moraju izvršiti točno jednom radije biraj vrijeme izvan 1:00–3:00 ili koristi UTC.

Vixie cron, systemd timeri, Quartz i AWS

  • systemd timeri koriste OnCalendar= s drukčijom sintaksom: Mon..Fri *-*-* 09..17:00/15:00. Uvjeti dana u tjednu i datuma kombiniraju se s I, a ne s ILI, pa neki cron izrazi nemaju točan ekvivalent.
  • Quartz i Spring na prvo mjesto stavljaju polje sekundi i mogu dodati polje godine. Jedno od dva polja dana mora biti ?, a Quartz dane u tjednu broji od 1 do 7 počevši od nedjelje, za razliku od cronovih 0–6. Alat dane u tjednu piše nazivima (MON-FRI) kako bi izbjegao tu zamku.
  • AWS EventBridge koristi cron(minute sati dan mjesec dan-u-tjednu godina): šest polja, bez sekundi, ? u jednom od polja dana i godinu na kraju.

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

Opis rasporeda običnim riječima dostupan je na hrvatskom. Vremena sljedećih pokretanja prikazuju se u formatu tvog jezika, a sve se izračunava lokalno u tvom pregledniku.

Česta pitanja

Kako pokrenuti zadatak svakih 5 minuta?

Upotrijebi */5 * * * *. Zadatak se izvodi u minutama 0, 5, 10… svakog sata.

Kako pokrenuti zadatak zadnjeg dana u mjesecu?

Mnogi planeri prihvaćaju L u polju dana u mjesecu: 0 18 L * *. S običnim Vixie cronom izvršavaj svaki dan od 28. do 31. i u skripti provjeri je li sutra 1.

Što radi @reboot?

Izvršava naredbu jednom, kad se pokrene cron daemon. Nema rasporeda, pa alat za njega ne može popisati vremena izvođenja.

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

Provjeri vremensku zonu poslužitelja, korisnikov crontab nasuprot /etc/crontab (koji ima dodatno polje korisnika) i PATH: cron se pokreće s minimalnim okruženjem.

Je li nedjelja 0 ili 7?

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