Cron, crontab

Mogućnost da sami zadajemo vrijeme kad će se pokrenuti neki program jedan je od osnovnih zahtjeva svakog administratora servera, pa i kućnog računala koje se ne gasi često. Tako u neko gluho doba noći možemo pozvati backup proceduru kad to nikome neće smetati ili pokrenuti bilo koji procesorsko ili mrežno zahtjevniji posao koji ne zahtijeva naš nadzor. Može to biti i jednostavni podsjetnik, koji će iskočiti u točno određeno vrijeme.
Za takve poslove mora se brinuti posebni program koji će stalno nadzirati točno vrijeme i kad se ono poklopi sa zadanim, pokrenuti neku naredbu. Postoje dva mehanizma, at i cron.

At - jednokratni poslovi

Sintaksa at naredbe vrlo je jednostavna. Kao njen argument zadaje se vrijeme kad se neki posao treba pokrenuti, a popis poslova se može zadati kao "-f popis.txt" odnosno tekstualnom datotekom s listom naredbi. Pokrene li se naredba samo s vremenom, ulazimo u interaktivnu ljusku gdje možemo redom navoditi naredbe sve do pritiska tipki Ctrl-D. Vrijeme se zadaje prirodnim (engleskim) jezikom. Tako primjerice "3am Feb 20" i nije potrebno objašnjavati. Ako se ne navede dan, pretpostavlja se da je to tekući, a ako je zadano vrijeme upravo prošlo, pokrenut će se prvom slijedećom prilikom. Možemo i eksplicitno zadati sutrašnji datum ključnom riječi tomorrow. Za zadavanje relativnog vremena, primjerice za 4 sata, pisat ćemo "now +4 hours".
Nakon što su poslovi zadani, njihov popis možemo vidjeti naredbom atq. Za brisanje pojedinog posla, pokrećemo naredbu atrm s rednim brojem dobivenim iz prethodnog popisa. Bitno je spomenuti da će se bilo koja naredba pokrenuti pod /bin/sh ljuskom. Ako putanju (PATH) te ljuske nemamo dobro postavljenu, neke od naredbi neće se moći pokrenuti jer neće biti pronađene u direktorijima. Ako nam se to dogodi, možemo pisati imena programa s punim putanjama, primjerice "/usr/bin/updatedb". Okolina koja je bila postavljena kad smo zadavali dotični posao vrijedit će i kod njegovog izvršavanja, pa se spomenuti problem može riješiti i postavljanjem PATH varijable upravo tad. Izlaz svakog od poslova e-mailom se šalje korisniku koji ga je pokrenuo.

Cron - periodika

Danas se znatno češće koristi Cron, koji omogućuje periodičko pokretanje naredbi. Sve operacije zadaju se preko naredbe crontab. Posao u cronu može se definirati naredbom crontab -e (edit), a pregledavati s -l (list). Brisanje svih zapisa odjednom može se zadati nastavkom -r.
Pojedini zapis sastoji se od definicije vremena i naredbe koja će se pokrenuti. Vrijeme pak ima pet rubrika odvojenih razmacima, redom minute, sati, dan u mjesecu, mjesec i dan u tjednu. "59 23 29 2 *" dogodit će se u ponoć krajem veljače, no ipak jednom u četiri godine. Postavimo li zvjezdicu umjesto bilo kojeg od tih brojeva, ona će značiti "svaki put". Primjerice, ako je zvjezdica na drugom mjestu, naredba će se izvršavati svakih sat vremena. U jednoj rubrici možemo navesti i više vrijednosti odvojenih zarezima ili kao raspon brojeva. Primjerice, pišemo li "15,30,45,00 * * 12 2-4" to znači da će se naredba izvršavati svakih 15 minuta, ali samo u prosincu i to utorcima, srijedama i četvrtcima. Vrijednosti se mogu zadavati i po koracima. Ako bi za prvi stupac pisali "*/3" to bi označavalo svake tri minute. Svaka dva sata u drugoj rubrici možemo pisati i kao "0-23/2". Mjeseci i dani se, osim brojkama, mogu označavati i skraćenim engleskim nazivima.
Izlaz svih poslova se kao i kod at-a šalje e-mailom, no to ne mora biti onaj od osobe koja ga je pokrenula, već se može definirati alternativa u varijabli MAILTO, na vrhu crontab datoteke. Ako ne želimo primati nikakve obavijesti, na kraju retka možemo dodati sintagmu " >/dev/null 2>&1". Brojni programi kod instalacije stavljaju svoje skripte u poddirektorije negdje (zavisno od distribucije) unutar /etc direktorija. Tako primjerice cron.daily sadrži skripte koje će se pokretati jednom dnevno, tijekom noći, pa i tamo možemo postaviti vlastite.

Anacron

Programi često svoje potrebe žele ostvariti u najčudnija vremena, ne vodeći računa o desktop računalima koja su uglavnom ugašena preko noći i izvan radnog vremena. Kako mi ne bi morali proučavati vlastite navike i temeljem toga mijenjati vrijeme izvođenja tih poslova, za takvo nešto brine se anacron. Njegova je zadaća periodično pokretanje poslova, ali ne na vremenskoj bazi, već kad god je računalo uključeno. Konfiguracija se nalazi u /etc/anacrontab, a svaki redak se sastoji od četiri polja. Prvi stupac odnosi se na period u danima (za posao jednom tjedno broj će biti 7), drugi je pauza u minutama od pokretanja sustava do pokretanja posla, treći je neka jedinstvena oznaka posla, dok je zadnji sama naredba.
Problemi su mu što se tako ne može precizno kontrolirati vrijeme (bilježe se samo dani, ne i sati), te što anacron ne vodi računa o opterećenju sustava, tj. pokreće program iako možda korisnik radi nešto drugo (no to je boljka i ostalih).

Ivan Capan