Sistemska usluga (daemon) je proces koji u pozadini izvodi određenu funkciju ili sistemski zadatak. U skladu sa Unix-ovim i Linux-ovim principom modularnosti, sistemske usluge su programi, a ne deo jezgra. Mnoge sistemske usluge se pokreću prilikom podizanja sistema i nastavljaju da rade sve dok radi i sistem. Druge sistemske usluge pokreću se po potrebi i rade samo dok je neophodno. Neke sistemske usluge ne isporučuju se uz sve distribucije Linuxa.
Pre programa
inetd, sve sistemske usluge pokretale su se prilikom podizanja sistema i stalno su bile aktivne (tačnije, bile su blokirane i čekale na zahteve da bi nešto radile). Vremenom, sve više sistemskih usluga je dodavano sistemu. Njihov broj je postao tako velik da je to počelo da izaziva probleme s performansama. Stručnjaci sa univerziteta Berkeley napravili su program
inetd, sistemsku uslugu koja je zadužena za pokretanje drugih sistemskih usluga po potrebi. Program
inetd je bio tako uspešan da je do sada deo svih verzija Unix-a i Linux-a, a većina novih sistemskih usluga radi pod njegovom kontrolom.
Postoji mnogo sistemskih usluga s kojima se administratori moraju dobro upoznati, bilo zato što ih treba stalno održavati ili zato što igraju važnu ulogu u svakodnevnom radu sistema. U daljem tekstu će se govoriti o dvema veoma važnim sistemskim uslugama,
init i
, a zatim o programima
inetd i
xinetd.
INIT: PRVOBITNI PROCES
Program
init je prvi proces koji se pokreće posle podizanja sistema i verovatno predstavlja najvažniju sistemsku uslugu. Njegov identifikator PID je uvek 1 (jedan) i on je roditeljski proces svih korisničkih procesa i skoro svih sistemskih procesa.
Program
init prilikom pokretanja postavlja sistem u jednokorisnički način rada ili počinje da izvršava skripte potrebne za dovođenje sistema u višekorisnički režim. Kada se sistem podiže u jednokorisničkom režimu,
init čeka da korisnik završi rad u jednokorisničkom komandnom okruženju, tj. da otkuca
exit ili <Control-D>, pa nastavlja da pokreće skripte.
U višekorisničkom režimu rada,
init pokreće procese koji će obrađivati prijavljivanje korisnika. Prijavljivanje na serijske priključke obično obrađuje neka varijanta programa
getty (npr.
aggety,
mgetty ili
mingetty). Na mnogim sistemima
init takođe nadgleda procedure za prijavljivanje u X Windows.
Osim upravljanja prijavljivanjem,
init takođe ima težak zadatak da istera duhove iz zombi procesa, koji bi se inače namnožili na sistemu.
Program
init definiše nekoliko "režima rada" pomoću skripti aktivnih sistemskih usluga. Postoji sedam režima označenih od 0 do 6. Ime "s" je obično sinonim za režim 1 (jednokorisnički režim). Osobine režima definisane su u datoteci
/etc/inittab.
Početni režim rada obično zadaje program za podizanje sistema. Ako taj program traži režim "s",
init ulazi u jednokorisnički režim rada. U suprotnom, u datoteci
/etc/inittab traži stavke koje se odnose na traženi nivo rada i izvršava odgovarajuće komande.
Komanda
telinit menja režim rada programa
init posle podizanja sistema. Na primer, komanda
telinit 4 naređuje programu
init da pređe u režim rada 4. Najkorisnija opcija programa
telinit jeste opcija
-q, koja naređuje programu
init da ponovo pročita datoteku
/etc/inittab.
Distribucije Linuxa obično uvode dodatni sloj apstrakcije iznad osnovog mehanizma radnih režima programa
init. Taj doatni sloj omogućava pojedinačnim softverskim paketima da instaliraju pokretačke skripte bez menjanja sistemske datoteke
inittab. Prilikom promene radnog režima,
init izvršava odgovarajuće pokretačke skripte i prosleđuje im argument
start ili
stop.
CRON I ATD: KOMANDE ZA RASPOREĐIVANJE POSLOVA
Sistemska usluga
cron (u distribuciji Red Hat zove se
crond) periodično pokreće komande u zadato vreme. Datoteke s rasporedom izvršavanja (cron tabele) mogu praviti i korisnici i administratori.
Komanda
cron se često koristi za automatiovanje poslova održavanja sistema, uključujući upravljanje zapisničkim datotekama i svakodnevno čišćenje sistema datoteka. Sistemska usluga
atd pokreće komande čiji je vremenski raspored definisan komandom
at. U stvari, administratorima je komanda
cron toliko važna da će se u daljem tekstu govoriti o
Periodičnim procesima.
PERIODIČNI PROCESI
Sistemom ćete najlakše upravljati ako automatizujete što veći broj poslova. Na primer, program
adduser može da dodaje nove korisnike brže od vas, a i manje greši. Skoro svaki posao se može programirati kao skripta komandnog okruženja, na jeziku Perl ili kao skript jezik
expect.
Često je korisno da se skripta ili naredba izvrše potpuno bez učešća čoveka. Na primer, skirpta može da proverava (recimo svakih pola sata) da li usmerivači i mrežni prolazi rade, i da vas obavesti elektronskom poštom ako otkrije probleme (u mnogim organizacijama, skripte modemom pozivaju pejdžer administratora da bi ga obavestile o problemima).
CRON: VREMENSKO RASPOREĐIVANJE NAREDBI
U Linuxu, periodičnim izvršavanjem obično rukuje sistemska usluga
cron. Ona se pokreće u vreme podizanja sistema i ostaje aktivna sve dok sistem radi. Sistemska usluga
cron čita jednu ili više konfiguracijskih datoteka koje sadrže spiskove naredbi s vremenom kada ih treba izvršiti. Naredbe se izvršavaju u okruženju
sh, tako da
cron može da urado sve što možete obaviti ručno iz komandnog okruženja (u stvari,
/bin/sh je u Linuxu veza s komandnim okruženjem
bash, poboljšanom verzijom tradicionalnog komandnog okruženja Bourne Shell). Usluga
cron može da koristi i druga komandna okruženja.
Linux se distribuira s verzijom Vixie-cron, koja pruža dodatne funkcije a iz nje su izbačene nepotrebne sitnice.
Konfiguracijska datoteka usluge
cron se zove crontab, što je skraćenica od "cron table" (cron tabela). Usluga traži crontab datoteke na tri mesta:
/var/spool/cron (ili u poddirektorijumima
/var/spool/cron, i to
tabs na SuSe-u i
crontabs na Debianu),
/etc/cron.d i
/etc/crontab.
Korisničke datoteke smeštene su u direktorijumu
/var/spool/cron. Obično postoji (najviše) jedna datoteka po korisniku: jedna za administratora (root), jedna za prvog korisnika, jedna za drugog itd. Crontab datoteke dobijaju imena po korisnicima kojima pripadaju, a
cron koristi ta imena datoteka da bi odredio korisnički identifikator koji koristi kada izvršava naredbe iz tih datoteka, Nredba
crontab prenosi crontab datoteke u taj direktorijum iz njega.
Crontab datoteke koje zadaju izvršavanje poslova održavanja sistema i druge administrativne poslove, smeštene su u datoteci
/etc/crontab i u datotekama u direktorijumu
/etc/cron.d. Format tih datoteka malo se razlikuje od formata korisničkih crontab datoteka, jer one omogućavaju da naredbe izvršava bilo koji korisnik.
Cron postupa sa stavkama u
/etc/crontab i
/etc/cron.d na istovetan način. Predviđeno je da datoteku
/etc/crontab ručno održava administrator sistema, dok je
/etc/cron.d direktorijum u kojem softverski paketi mogu instalirati svoje stavke.
Kada se pokrene,
cron čita sve svoje konfiguracione datoteke, snima ih u memoriju i odlazi na spavanje. Jednom u minutu,
cron se budi, proverava vreme promene crontab datoteka, ponovo učitava datoteke koje su promenje i zatim izvršava poslove prema rasporedu za taj minut, pre nego što se vrati na spavanje.
Usluga
cron ne izvršava naredbe koje su preskočene dok je sistem bio neaktivan ili kada dođe do naglih promena sistemskog vremena (na primer, ako primetite da sistemski časovnik kasni 20 minuta, pa podestite tačno vreme). Za izuzetno važne poslove koristite
anacron, verziju crona koji se isporučuje u distribucijama Red Hat i Debian. Ta usluga je po koncepciji veoma slična
cronu, ali osigurava da naredbe ne budu izostavljane zbog vidljivih prekida u vremenskom toku.
Iz nejasnih razloga, na Red Hat sistemima
cron je preimenovan u
crond.
FORMAT CRONTAB DATOTEKA
Sve crontab datoteke na sistemu su sličnog formata. Komentari se uvode tako što se u prvu kolonu reda ispisuje taraba (#). Svaki red koji nije komentar sadrži šest ili sedam polja i predstavlja jednu tarabu:
Code:
minut sat dan mesec danusedmici [imekorisnika] naredba
Prvih šest polja razdvojeno je razmakom, ali u polju
naredba razmak se tumači doslovno. Polje
imekorisnika se nalazi samo u datoteci
/etc/crontab i u datotekama u direktorijumu
/etc/cron.d. Ono oređuje korisnika u čije ime treba da se izvrši
naredba. To polje ne postoji i suvišno je u korisničkim crontab datotekama (onim koje su smeštene u
/var/spool/cron) jer ime datoteke određuje korisnka.
Polja
minuta,
sat,
mesec i
danusedmici određuju kada treba da se izvrši
naredba.
-------------------------------------------------------------------
Polje Opis Opseg
-------------------------------------------------------------------
minut Minut u satu 0 - 59
sat Sat u danu 0 - 23
dan Dan u mesecu 1 - 31
mesec Mesec u godini 1 - 12
dan u sedmici Dan u sedmici 0 - 6 (0 = nedelja)
-------------------------------------------------------------------
Svako od ovih polja koje se odnosi na vreme može da sadrži:
* zvezdicu, koja zamnjuje sve vrednosti
* jedan ceo broj, koji predstavlja tačno ono što piše
* dva cela broja razdvojena crtom, koja predstavljaju opseg vrednosti
* niz celih brojeva ili opsega razdvojenih zapetama, koji predtsavljaju bilo koju od navedenih vrednosti.
Na primer, specifikacija vremena
Code:
45 10 * * 1-5
znači 10:45 pre podne, od ponedeljka do petka. Savet: Nikada ne stavljajte zvezdicu u prvo polje osim ako želite da se naredba izvršava svakog minuta.
Treba se čuvati mogućeg dvosmislenog tumačenja polja
danusedmici i
dan. Svaki dan je istovremeno i dan u sedmici i dan u mesecu. Ako se navedu i
danusedmici i
dan, vreme mora da zadovolji samo jedan dan od ta dva uslova.
Na primer
Code:
0,30 * 13 * 5
znači svakih pola sata u petak i svakih pola sata 13. u mesecu, a ne svakih pola sata u petak 13.
Vixie-cron dozvoljava da se vrednosti vremena zadaju u koracima. Na primer, niz 0,3,6,9,12,15,18,21 može da se u Vixie-cronu napiše sažetije kao 0-12/3.
Naredba je
sh komanda koja treba da se izvrši. To može biti bilo koja vežća naredba komandnog okruženja i ne mora da se stavi pod navodnike. Polje se nastavlja do kraja reda i može da sadrži i razmake i tabulatore.
Znak za procenat (%) se koristi da označi novi red u polju. Naredba je samo tekst do prvog znaka za procenat; ostali se redovi prenose naredbi kao standardni ulaz.
Ovo su neki primeri ispravnih crontab naredbi:
Code:
echo The time is now `date` > /dev/console
write Pera % Hi Pera. % Remember to get a job.
cd /etc; /bin/mail -s "Password file" evi < passwd
A ovo neki primeri contrab stavki:
Code:
30 2 * * 1 (cd /users/pera/project; make)
Ova stavka će se aktivirati svakog ponedeljka u 2:30 ujutru. Ona će izvršiti naredbu
make u direktorijumu
/users/pera/project. Ovakva stavka može se upotrebiti za pokretanje dugačkog postupka prevođenja u vreme kada ostali korisnici ne koriste sistem. Obično se rezultat naredbi šalje elektronskom poštom korisniku koji je izdao naredbu, to jest, korisniku po kome je crontab datoteka dobila ime. Uopšte, stvarni vlasnik crontab datoteka je administrator.
Code:
20 1 * * *find /tpm -atime +3 -exec rm -f {} ';'
Ta naredba će se izvršiti u 1:20 svakog jutra. Ona uklanja sve datoteke iz direktorijuma
/tpm kome se nije pristupalo u poslednja tri dana.
Code:
55 23 * * 0-3,6/staff/trent/bin/acct/-script
Taj red izvršava
acct-script u 11:55 uveče svakog dana osim četvrtkom i petkom. U Vixie-cron crontab datoteci mogu se se navesti i promenljive okruženja i njihove vrednosti.
UPRAVLJANJE CRONTAB DATOTEKAMA
Naredba
crontab imedatoteke instalira zadatu datoteku kao contrab datoteku tekućeg korisnka i zamenjuje prethodnu verziju te datoteke. Naredba
crontab -e pravi kopiju crontab datoteke korisnika, otvara je u programu za uređivanje teksta (koji je zadat promenljivom okruženja EDITOR) i zatim je vraća u direktorijum crontab. Naredba
crontab -l prikazuje sadržaj datoteke crontab na standardnom izlaznom uređaju, a
crontab -r je uklanja.
Većina sistema omogućava administratoru da navede i
imekorisnika tako da može čitati i uređivati crontab datoteke drugih korisnika. Na primer,
crontab -u pera -r briše crontab datoteku koja pripada korisnku pera.
Ako komandna linija ne sadrži argumente, naredba
crontab će pokušati da čita datoteku crontab sa standardnog toka. Ako u taj režim uđete slučajno, ne pokušavajte da izađete pomoću <Control-D> jer ćete tako izbrisati prethodni sadržaj datoteke crontab. Umesto toga, koriste <Control-C>.
Standardno, svi korisnici mogu da prave svoje crontab datoteke. Dve kofiguracijske datoteke,
/etc/cron.deny i
/etc/cron.allow (na SuSe sistemima, te datoteke se zovu
/var/spool//cron/deny i
/var/spool/cron/allow), omogućavaju da promenite to pravilo. Ako postoji datoteka allow, onda ona sadrži spisak korisnika (po jedan korisnik u redu) koji mogu da prave crontab datoteke. Nijedna osoba koja nije na tom spisku ne može da pozove naredbu
crontab. Ako datoteka allow ne postoji, proverava se datoteka denz. Ona je takođe spisak korisnika, ali njeno značenje je suprotno. Pristup je dozvoljen savkom, osim onim korisnicima koji su na spisku. Ako ne postoji ni datoteka allow ni datoteka deny, onda samo administrator može da pravi crontab datoteke.
Važno je primetiti da je upravljanje pristupom realizoavno pomoću naredbe
crontab, a ne pomoću usluge
cron. Ako korisnik prokrijumčari crontab datoteku u odgovarajući direktorijum,
cron će slepo izvršiti naredbe koje se nalaze u toj datoteci.
UOBIČAJENE PRIMENE SISTEMSKE USLUGE CRON
Neki standardni poslovi posebno su podesni za periodično izvršavanje i oni obično čine veći deo sadržaja crontab datoteke administratora.
Standardne stavke datoteke crontab se upisuju prilikom instaliranja Linuxa, najčešće u direktorijum
/etc/cron.d. Ako želite da deaktivirate standardne stavke, komentarišite ih tako što ćete upisati tarabu (#) na početak reda. Nemojte ih brisati, možda ćete kasnije hteti da ih aktivirate.
Osim direktorijuma
/etc/cron.d, u distribucijama Linuxa, periodične poslove sadrže i drugi direktorijumi, što pruža drugi način da softverski paketi instaliraju periodične poslove bez datoteke crontab. Na primer, skripte u direktorijumu
/etc/cron.daily se izvršavaju jednom dnevno, a skripte u direktorijumu
/etc/cron.weekly se izvršavaju jednom sedmično.
Čišćenje sistema datoteka
Pojedine datoteke svakog Linux sistema su bezvredne (ne, to nisu sistemske datoteke). Na primer, kad god program padne, jezgro ispisuje u datoteku
core sliku adresnog prostora tog programa (u ovom slučaju, reč "core" znači "memorija"). Datoteke
core au korisne programerima, ali za admisnitratore sistema one su obično izgubljen prostor. Korisnici najčešće i ne znaju da te datoteke postoje, pa ni ne ppkušavaju da ih izbrišu.
NFS (Network File System) je drugi izvor suvišnih datoteka. Kako NFS serveri ne održavaju stanje sesije, oni moraju da koriste posebno dogovoreno pravilo da bi sačuvali datoteke koje su izbrisane lokalno, ali ih udaljeni računar još koristi. Većina realizacija preimenuje takve datoteke u
.nfsxxx gde je xxx broj. Kada se zaboravi na datoteke koje su bile predviđene za brisanje i one se ostave svuda unaokolo, mogu da nastanu razni problemi.
Mnogi programi prave privremene datoteke u direktorijumu
/tmp ili
/var/tmp, koje se ne brišu iz nekog razloga. Neki programi, naročito programi za uređivanje teksta, prave kopije svake datoteke s kojom rade.
Delimično rešenje problema otpadnih datoteka jeste da se ustanovi neke vrsta noćnog čišćenja prostora na disku pomoću usluge
cron. U savremenim sistemima ta funkcija se pravi prilikom instaliranja, ali je dobro da pregledate podrazmevana svojstva sistema i uskladite ih s vašim potrebama. Evo nekoliko naredbi koje su realizovane pomoću alata
find.
Code:
find / -xdev -name core -atime +7 =exec rm -f {} ';'
Ova naredba uklanja datoteke core kojima se nije pristupalo u toku sedmice. Argument
-xdev ograničava
find samo na sonovni sistem datoteka. To ograničenje je važno na mrežama gde mnogi sistemi datoteka mogu biti unakrsno povezani. Ako hoćete da očistite više sistemskih datoteka, koristite zasebnu naredbu za svaki od njih. (
/var je tipično zaseban sistem datoteka).
Code:
find / -sdev -atime +3 '(' '#*' -o -name '#.*' -o -name '*.CKP' -o -name '*~' -o -name '.nfs*' ')' -exec rm -f {} ';'
Ova naredba briše sve datoteke čija imena počinju znacima # ili .# ili .nfs ili se završavaju sa ~ ili .CKP, a nije im se pristupalo u toku poslednja tri dana. Te privremene i rezervne datoteke obično prave programi za uređivanje teksta.
Code:
cd /tpm; find . ! -name . ! -name lost+found -type d -mtime +3 -exec /bin/rm -rf {} ';'
Ova naredba rekurzivno uklanja sve poddirektorijume direktorijuma
/tmp koji nisu promenjeni u poslednja 72 sata. U vreme podizanja sistema, skripte za pokretanje sistema uklanjaju obične datoteke iz direktorijuma
/tmp, ali neki sistemi ne uklanjaju direktorijume. Ako postoji direktorijum
lost+found on se ne uklanja. To je važno je
/tmp zaseban sistem datoteka.
Korisnici treba da znaju neke stvari o redovnim čišćenjima ako ih sprovode.
Distribucija konfiguracijskih datoteka na mreži
Ako radite na računarskoj mreži, često je pogodno da održavate jedinstvenu, mrežnu vrziju konfiguracijskih datoteka kao što je baza podataka alijasa e-maila (običčno
/etc/mail/aliases). Glavne verzije tih podataka mogu se distribuirai svake noći pomoću naredbi
rsync,
rdist ili pomoću skripti jezika
expect.
Ponekad je potrebna naknadna obrada takbih datoteka. Na primer, treba da izvršite naredbu
newaliases da biste pretvorili tekstualnu datoteku alijasa u binarni format koji koristi
sendmail, ako opcija
AutoRebuildAliases nije uključena. Možda ćete hteti i da učitate datoteke u administrativnu bazu podataka kao što je NIS.
Rotiranje zapisnih datoteka
Linux uspešno upravlja većinom svojih zapisničkih datoteka, ali neke datoteke se bezgranično povećavaju sve dok se ručno ne isprazne. Ima različitih načina da se spreči da zapisničke datoteke preterano rastu, a najjednostavniji je da ih periodično skraćujete.
Konzervativnija strategija je da "rotirate" zapisničke datoteke čuvajući po nekoliko sarijih verzija svake datoteke. Ta tehnika sprečava da zapisničke datoteke zatpaju disk, ali starije zapisničke informacije ostaju dostupne. Pošto je ortiranje zapisnika posao koji se redovno ponavlja, to je savršen zadatak za
cron.
[Ovu poruku je menjao Stefan Markic dana 30.10.2008. u 12:50 GMT+1]