Zakazani zadaci (cron)
Cron je sistemski servis koji automatski pokreće komande ili skripte prema zadatom rasporedu. Koristan je za backupe, čišćenje logova, slanje izveštaja — sve što se ponavlja po rasporedu.
Šta je cron?
Cron je demon (pozadinski servis) koji stalno radi i prati listu zadataka. Ta lista se zove crontab (cron table). Svaki korisnik ima sopstveni crontab, a postoji i sistemski crontab za root.
# Provjeri da li cron servis radi
systemctl status cron
# ili
systemctl status crond
crontab komanda
Upravljanje crontabom
# Otvori crontab u editoru (da dodaš/izmeniš zadatke)
crontab -e
# Prikaži trenutni crontab
crontab -l
# Obriši ceo crontab (pazi — briše sve!)
crontab -r
# Uredi crontab za drugog korisnika (kao root)
crontab -e -u korisnik
Napomena: Kada prvi put pokreneš
crontab -e, sistem te pita koji editor koristiti. Preporuka: odaberinanoza početnike.
Sintaksa crontaba
Svaki zadatak u crontabu je jedna linija:
MINUTA SAT DAN MESEC DAN_U_NEDELJI KOMANDA
* * * * * /put/do/komande
Polja
| Polje | Opseg vrednosti | Opis |
|---|---|---|
| MINUTA | 0 – 59 | Minut sata |
| SAT | 0 – 23 | Sat dana (0 = ponoć) |
| DAN | 1 – 31 | Dan meseca |
| MESEC | 1 – 12 | Mesec godine |
| DAN_U_NEDELJI | 0 – 7 | Dan u nedelji (0 i 7 = nedelja) |
Specijalni karakteri
| Karakter | Značenje | Primer |
|---|---|---|
* |
Svaka vrednost | * * * * * — svaki minut |
, |
Lista vrednosti | 1,15,30 — u 1., 15. i 30. minutu |
- |
Opseg vrednosti | 9-17 — od 9 do 17 sati |
/N |
Svaki N-ti | */5 — svakih 5 minuta |
Primeri cron zadataka
# Pokreni skriptu svakih 5 minuta
*/5 * * * * /home/student/provjera.sh
# Svaki dan u ponoć (00:00)
0 0 * * * /home/student/backup.sh
# Svaki radni dan u 8:30 ujutru (pon-pet)
30 8 * * 1-5 /home/student/izvestaj.sh
# Svaki ponedeljak u 06:00
0 6 * * 1 /home/student/sedmicni-backup.sh
# Prvog u mesecu u ponoć
0 0 1 * * /home/student/mesecni-backup.sh
# Svakog sata
0 * * * * /home/student/provjeri-prostor.sh
# Svakih 15 minuta između 9 i 17h
*/15 9-17 * * * /home/student/monitor.sh
# Svakog dana osim nedeljom u 10:00
0 10 * * 0-6 /home/student/zadatak.sh
Savet: Sajt crontab.guru vizuelno objašnjava cron sintaksu — veoma korisno za provjeru ispravnosti izraza.
Specijalni stringovi
Umesto 5 polja, možeš koristiti preglednije skraćenice:
| String | Ekvivalent | Opis |
|---|---|---|
@reboot |
— | Jednom, pri pokretanju sistema |
@hourly |
0 * * * * |
Svaki sat |
@daily |
0 0 * * * |
Svaki dan u ponoć |
@weekly |
0 0 * * 0 |
Svake nedelje |
@monthly |
0 0 1 * * |
Prvog u mesecu |
@yearly |
0 0 1 1 * |
Jednom godišnje |
# Primjer upotrebe specijalnih stringova
@reboot /home/student/start.sh
@daily /home/student/backup.sh
@hourly /home/student/provjeri.sh
Izlaz cron zadataka
Po defaultu, cron šalje izlaz (stdout i stderr) emailom lokalnom korisniku. Na serverima bez email servisa, poruke se gube ili odlaze u /var/spool/mail/.
Preusmeravanje izlaza
# Zapiši izlaz u log fajl
0 0 * * * /home/student/backup.sh >> /home/student/backup.log 2>&1
# Ignoriši sav izlaz (tihi mod)
0 0 * * * /home/student/backup.sh > /dev/null 2>&1
Napomena: U crontabu se
%mora eskejpovati kao\%.
Debugging cron zadataka
# Provjeri da li se cron zadatak izvršava — poglej sistemski log
grep CRON /var/log/syslog | tail -20
# Ručno pokreni istu komandu da provjeriš greške
/home/student/backup.sh
# Provjeri da li skripta ima pravo izvršavanja
ls -l /home/student/backup.sh
chmod +x /home/student/backup.sh
Česta greška: Cron radi sa minimalnim okruženjem (PATH je ograničen). Uvek koristi apsolutne putanje do komandi u cron zadacima, npr.
/usr/bin/python3umesto samopython3.