bitlvl
SR

Objašnjenje cron izraza

Ukucajte pet polja crontab unosa. Dobijate raspored običnim jezikom i sledećih deset trenutaka u kojima bi se pokrenuo, u vremenskoj zoni po vašem izboru.

Rezultati i poruke ovog alata prikazuju se na engleskom.

Crontab sintaksa

┌───────────── minut          0–59
│ ┌─────────── sat            0–23
│ │ ┌───────── dan u mesecu   1–31
│ │ │ ┌─────── mesec          1–12  ili jan–dec
│ │ │ │ ┌───── dan u nedelji  0–7   ili sun–sat  (0 i 7 su nedelja)
│ │ │ │ │
* * * * *  komanda koja se izvršava
SintaksaZnačenjePrimer
*Svaka vrednost* * * * *svakog minuta
5Tačno ova vrednost5 0 * * *00:05 svakog dana
1-5Opseg0 9 * * 1-509:00 radnim danima
*/15Svaka n-ta vrednost*/15 * * * *svakih 15 minuta
1,15Lista0 0 1,15 * *ponoć 1. i 15. u mesecu
8-18/2Korak unutar opsega0 8-18/2 * * *svaka 2 sata od 08:00 do 18:00
@dailyMakro@dailyisto što i 0 0 * * *

Zamka dan u mesecu / dan u nedelji

Ako su i polje dana u mesecu i polje dana u nedelji ograničena, standardni cron se pokreće kada se bilo koje poklopi, a ne oba. 0 0 13 * 5 se pokreće svakog 13. i svakog petka, a ne samo petkom 13. Alat označava ovaj slučaj.

Vremenske zone i letnje računanje vremena

Cron radi u sistemskoj vremenskoj zoni mašine (ili prema promenljivoj CRON_TZ / TZ gde je podržana). U noći kada se sat pomera unapred, posao zakazan za 02:30 možda se uopšte neće pokrenuti; kada se vraća unazad, može se pokrenuti dvaput. Poslovi koji moraju da se izvrše tačno jednom dnevno najsigurniji su između 03:00 i 23:00, ili u UTC. Lista izvršavanja iznad koristi prava kalendarska pravila za zonu koju izaberete, pa noć promene vremena možete proveriti direktno.

Još stvari koje treba znati

  • Cron ima rezoluciju od jednog minuta. Za sekunde koristite systemd tajmer ili petlju u poslu.
  • Okruženje je minimalno: postavite PATH u crontabu ili koristite apsolutne putanje, i preusmerite izlaz ili će vam biti poslat mejlom.
  • % u polju komande je novi red osim ako se ne escape-uje kao \%, što lomi date +%F.
  • Izrazi sa šest polja i kolonom za sekunde su Quartz/Spring sintaksa, a nestandardni L, W i # takođe su Quartz. Običan crontab ih ne prihvata.

Pitanja

Kako da pokrećem cron posao na svakih 5 minuta?

*/5 * * * *. Za svakih 5 minuta samo u radno vreme: */5 9-17 * * 1-5.

Kako da pokrenem nešto svakog dana u ponoć?

0 0 * * *, ili makro @daily. Za 00:30 koristite 30 0 * * *.

Kako da zakažem poslednji dan u mesecu?

Standardni cron to ne može da izrazi direktno. Pokrećite ga 28–31. i neka skripta proveri da li je sutra 1.: 0 0 28-31 * * [ "$(date -d tomorrow +%d)" = "01" ] && /putanja/do/posla.

Da li je nedelja dan u nedelji 0 ili 7?

Oba. 0 i 7 su nedelja u većini implementacija crona; ponedeljak je 1. Prihvataju se i imena (sun, mon), kod kojih je teže pogrešiti.

Zašto se moj posao pokrenuo u pogrešno vreme?

Gotovo uvek vremenska zona: server je u UTC, a vi ste očekivali lokalno vreme, ili obrnuto. Proverite sa date na serveru, ili postavite CRON_TZ=Europe/Belgrade na vrh crontaba gde je podržano (cronie, Vixie cron).

Koja je razlika između crona i systemd tajmera?

Tajmeri mogu da rade po kalendarskim izrazima sa sekundama, da nadoknade propuštena izvršavanja posle restarta (Persistent=true), da pišu u journal i da zavise od drugih unita. Cron je jednostavniji i univerzalan. Oba su u redu za obične zakazane poslove.