Kratak odgovor
Cron zadatak se najčešće ne izvršava zbog pogrešne sintakse u crontab-u, nedostatka dozvole za izvršavanje, pogrešne putanje do skripte ili zato što cron servis nije pokrenut. Proverite logove, testirajte skriptu ručno i koristite apsolutne putanje.
Kako se problem prepoznaje
- Zadatak se ne pokreće u zakazano vreme
- Nema očekivanog izlaza ili fajla
- Cron log je prazan ili prikazuje greške
- Skripta radi ručno, ali ne i iz cron-a
- Email obaveštenja o greškama ne stižu
Najčešći uzroci
Cron servis nije pokrenut
Ako cron daemon nije aktivan, nijedan zadatak se neće izvršiti. Proverite status servisa i pokrenite ga ako je potrebno.
Pogrešna sintaksa u crontab-u
Greška u poljima za vreme ili nedostatak završnog reda može sprečiti izvršavanje. Proverite format i koristite `crontab -l` da vidite aktivne zadatke.
Nedostatak dozvole za izvršavanje
Skripta mora imati dozvolu za izvršavanje (`chmod +x`). Takođe, proverite da li je vlasnik korisnik koji pokreće cron.
Pogrešna putanja ili okruženje
Cron koristi ograničeno okruženje, pa relativne putanje i promenljive mogu biti problem. Koristite apsolutne putanje i eksplicitno definišite promenljive.
Problemi sa dozvolama ili vlasništvom
Fajlovi kojima skripta pristupa moraju biti čitljivi korisniku cron-a. Proverite dozvole i vlasništvo nad fajlovima i direktorijumima.
Rešenje korak po korak
- 1
Proverite da li je cron servis pokrenut
Pokrenite
systemctl status cron(ilisystemctl status crondna nekim distribucijama). Ako servis nije aktivan, pokrenite ga sasudo systemctl start croni omogućite automatsko pokretanje sasudo systemctl enable cron. - 2
Pregledajte aktivne cron zadatke
Izvršite
crontab -lda vidite zadatke za trenutnog korisnika. Za sistemske zadatke pogledajte fajl/etc/crontabi direktorijum/etc/cron.d/. Uverite se da nema sintaksnih grešaka. - 3
Testirajte skriptu ručno
Pokrenite skriptu iz terminala sa istim korisnikom koji pokreće cron. Ako ne radi ručno, problem je u skripti, a ne u cron-u. Ispravite greške i ponovo testirajte.
- 4
Koristite apsolutne putanje
U crontab-u navedite punu putanju do skripte i interpretatora, npr.
/usr/bin/python3 /home/korisnik/skripta.py. Isto važi i za fajlove kojima skripta pristupa. - 5
Postavite promenljive okruženja
Na početak crontab-a dodajte
PATH=/usr/bin:/bini druge potrebne promenljive. Možete ih definisati i unutar skripte. Izbegavajte oslanjanje na promenljive iz interaktivne sesije. - 6
Proverite dozvole i vlasništvo
Uverite se da skripta ima dozvolu za izvršavanje (
chmod +x skripta.sh) i da korisnik koji pokreće cron ima pravo da je čita i izvršava. Proverite i dozvole nad direktorijumima i fajlovima koje skripta koristi. - 7
Pregledajte cron logove
Na sistemima sa systemd-journald, koristite
journalctl -u cronilijournalctl -u crond. Na drugim sistemima pogledajte/var/log/syslogili/var/log/cron. Tražite greške vezane za vaš zadatak. - 8
Privremeno preusmerite izlaz u fajl
Dodajte
>> /tmp/cron.log 2>&1na kraj linije u crontab-u da biste uhvatili standardni izlaz i greške. Zatim pregledajte fajl nakon što se zadatak izvrši. - 9
Proverite da li je vreme tačno
Uverite se da je sistemsko vreme ispravno (
date). Ako je vremenska zona pogrešna, cron će se pokretati u pogrešno vreme. Podesite vremensku zonu i sinhronizaciju vremena.
Ako ništa ne pomogne
Ako ste proverili sve navedeno, a zadatak se i dalje ne izvršava, pokušajte da pokrenete cron u debug režimu. Za Vixie cron, nakratko zaustavite servis i pokrenite ga ručno sa sudo cron -f -x proc (ili odgovarajućom opcijom za vaš cron); posle testa ponovo pokrenite servis. To će prikazati detaljne informacije o obradi zadataka. Takođe, proverite da li postoje ograničenja putem fajlova /etc/cron.allow i /etc/cron.deny koja mogu sprečiti korisnika da koristi cron. Na kraju, razmotrite alternativu kao što je systemd timer, koji nudi bolje logovanje i upravljanje.
Kako da sprečite da se ponovi
- Redovno proveravajte cron logove
- Koristite apsolutne putanje i eksplicitne promenljive
- Testirajte skripte pre dodavanja u cron
- Ograničite dozvole i pratite vlasništvo fajlova
Kada je bolje pozvati stručnjaka
Ako ne možete da pronađete uzrok ili nemate pristup logovima i sistemskim fajlovima, obratite se IT podršci. Oni mogu brže da izoluju problem i spreče zastoje u radu.
Održavanje IT infrastrukture · Serveri, mreže, backup, bezbednost i helpdeskČesta pitanja
Zašto se moj cron zadatak ne izvršava iako je sintaksa ispravna?
Najčešći razlog je nedostatak dozvole za izvršavanje skripte ili pogrešna putanja do interpretatora. Proverite da li skripta radi kada je pokrenete ručno i da li su sve putanje apsolutne.
Kako da vidim greške koje cron prijavljuje?
Možete privremeno preusmeriti izlaz u fajl dodavanjem `>> /tmp/cron.log 2>&1` u crontab. Takođe, pregledajte sistemske logove kao što su `/var/log/syslog` ili `journalctl -u cron`.
Da li je cron isto što i anacron?
Nije. Cron je namenjen za precizno zakazivanje, ali neće pokrenuti propuštene zadatke ako je računar bio isključen. Anacron je dizajniran da izvrši propuštene zadatke, ali ne garantuje tačno vreme.