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 | Sintaksa | Značenje | Primer | |
|---|---|---|---|
| * | Svaka vrednost | * * * * * | svakog minuta |
| 5 | Tačno ova vrednost | 5 0 * * * | 00:05 svakog dana |
| 1-5 | Opseg | 0 9 * * 1-5 | 09:00 radnim danima |
| */15 | Svaka n-ta vrednost | */15 * * * * | svakih 15 minuta |
| 1,15 | Lista | 0 0 1,15 * * | ponoć 1. i 15. u mesecu |
| 8-18/2 | Korak unutar opsega | 0 8-18/2 * * * | svaka 2 sata od 08:00 do 18:00 |
| @daily | Makro | @daily | isto š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
PATHu 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 lomidate +%F.- Izrazi sa šest polja i kolonom za sekunde su Quartz/Spring sintaksa, a nestandardni
L,Wi#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.