Početak›Forumi›Linuks›Opšte Linuks diskusije›Odg: Sistemske usluge
- This topic has 9 odgovora, 7 glasova, and was last updated 16 years, 7 months ranije by BrokeBody.
-
AutorČlanci
-
17. januar 2007. u 11:52 pm #8273BrokeBodyUčesnik
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 potrebi i rade samo dok je neophodno. Neke sistemske usluge ne isporučuje 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 prices 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 , 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 [imekorsnika] naredba
[/code]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[/code]
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[/code]
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 [/code] A ovo neki primeri contrab stavki: [code] 30 2 * * 1 (cd /users/pera/project; make) [/code] Ova stavka će se aktivirati svakog ponedeljka u 2:30 ujutru. Ona će izvršiti naredbu [b]make[/b] u direktorijumu [b]/users/pera/project[/b]. 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 {} ';' [/code] Ta naredba će se izvršiti u 1:20 svakog jutra. Ona uklanja sve datoteke iz direktorijuma [b]/tpm[/b] kome se nije pristupalo u poslednja tri dana. [code] 55 23 * * 0-3,6/staff/trent/bin/acct/-script [/code] Taj red izvršava [b]acct-script[/b] 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. [b]UPRAVLJANJE CRONTAB DATOTEKAMA[/b] Naredba [b]crontab[/b] [i]imedatoteke[/i] instalira zadatu datoteku kao contrab datoteku tekućeg korisnka i zamenjuje prethodnu verziju te datoteke. Naredba [b]crontab -e[/b] 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 [b]crontab -l[/b] prikazuje sadržaj datoteke crontab na standardnom izlaznom uređaju, a [b]crontab -r[/b] je uklanja. Većina sistema omogućava administratoru da navede i [i]imekorisnika[/i] tako da može čitati i uređivati crontab datoteke drugih korisnika. Na primer, [b]crontab -u pera -r[/b] briše crontab datoteku koja pripada korisnku pera. Ako komandna linija ne sadrži argumente, naredba [b]crontab[/b] ć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 jer ćete tako izbrisati prethodni sadržaj datoteke crontab. Umesto toga, koriste . Standardno, svi korisnici mogu da prave svoje crontab datoteke. Dve kofiguracijske datoteke, [b]/etc/cron.deny[/b] i [b]/etc/cron.allow[/b] (na SuSe sistemima, te datoteke se zovu [b]/var/spool//cron/deny[/b] i [b]/var/spool/cron/allow[/b]), 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 [b]crontab[/b]. 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 [b]crontab[/b], a ne pomoću usluge [b]cron[/b]. Ako korisnik prokrijumčari crontab datoteku u odgovarajući direktorijum, [b]cron[/b] će slepo izvršiti naredbe koje se nalaze u toj datoteci. [b]UOBIČAJENE PRIMENE SISTEMSKE USLUGE CRON[/b] 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 [b]/etc/cron.d[/b]. 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 [b]/etc/cron.d[/b], 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 [b]/etc/cron.daily[/b] se izvršavaju jednom dnevno, a skripte u direktorijumu [b]/etc/cron.weekly[/b] se izvršavaju jednom sedmično. [b][i]Čišćenje sistema datoteka[/i][/b] Pojedine datoteke svakog Linux sistema su bezvredne (ne, to nisu sistemske datoteke). Na primer, kad god program padne, jezgro ispisuje u datoteku [b]core[/b] sliku adresnog prostora tog programa (u ovom slučaju, reč "core" znači "memorija"). Datoteke [b]core[/b] 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 [b].nfs[/b]xxx 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 [b]/tmp[/b] ili [b]/var/tmp[/b], 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 [b]cron[/b]. 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 [b]find[/b]. [code] find / -xdev -name core -atime +7 =exec rm -f {} ';' [/code] Ova naredba uklanja datoteke core kojima se nije pristupalo u toku sedmice. Argument [b]-xdev[/b] ograničava [b]find[/b] 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. ([b]/var[/b] je tipično zaseban sistem datoteka). [code] find / -sdev -atime +3 '(' '#*' -o -name '#.*' -o -name '*.CKP' -o -name '*~' -o -name '.nfs*' ')' -exec rm -f {} ';' [/code] 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 {} ';' [/code] Ova naredba rekurzivno uklanja sve poddirektorijume direktorijuma [b]/tmp[/b] koji nisu promenjeni u poslednja 72 sata. U vreme podizanja sistema, skripte za pokretanje sistema uklanjaju obične datoteke iz direktorijuma [b]/tmp[/b], ali neki sistemi ne uklanjaju direktorijume. Ako postoji direktorijum [b]lost+found[/b] on se ne uklanja. To je važno je [b]/tmp[/b] zaseban sistem datoteka. Korisnici treba da znaju neke stvari o redovnim čišćenjima ako ih sprovode. [b][i]Distribucija konfiguracijskih datoteka na mreži[/i][/b] 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 [b]/etc/mail/aliases[/b]). Glavne verzije tih podataka mogu se distribuirai svake noći pomoću naredbi [b]rsync[/b], [b]rdist[/b] ili pomoću skripti jezika [b]expect[/b]. Ponekad je potrebna naknadna obrada takbih datoteka. Na primer, treba da izvršite naredbu [b]newaliases[/b] da biste pretvorili tekstualnu datoteku alijasa u binarni format koji koristi [b]sendmail[/b], ako opcija [b]AutoRebuildAliases[/b] nije uključena. Možda ćete hteti i da učitate datoteke u administrativnu bazu podataka kao što je NIS. [b][i]Rotiranje zapisnih datoteka[/i][/b] 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 [b]cron[/b].17. januar 2007. u 11:53 pm #51698BrokeBodyUčesnikPredlažem da se ova tema stavi kao sticky.
Ubuduće ću pisati (prekucavati, prevoditi… 😛 ) o upravljanju sistemskim uslugama (programi inetd i xinetd), sistemskim uslugama jezgra, sistemskim uslugama datoteka, sistemskim internet uslugama, i sistemskim uslugama za usklađivanje vremena, kako bi cela ova priča o sistemskim uslugama bila kompletna.
Kada ću sve to da napišem, Boga pitaj. I za ovo mi je trebalo sto godina. 😛 U svakom slučaju, cela ova priča o sistemskim uslugama je i razlog što već dugo nisam napisao nikakav HOWTO ili nešto što uglavnom nikome ne treba (kao što imam običaj da pišem uputstva o svakakvim glupostima 🙂 ), da ne bude da sam se olenjio od kako sam nagrađen onim Mepis-om, koji još nisam ni probao. 😀
A do sledećeg teksta, možda neko i pročita sve ovo. 😀 Usput sam i ja naučio puno korisnih stvari o svemu ovome, a i sada mi je malo jasnija slika da Linux ima tako dobru zaštitu ne zato što ga manje ljudi koristi (te se vrši manje “upada” i pravi manje virusa ::) ), već je sama “filozofija zaštite” na Linuxu, ako mogu tako da kažem, mnogo drugačija od recimo Windows-a. 😉
18. januar 2007. u 12:57 am #51699MladenIsakovicUčesnik– Svaka čast za trud O0
18. januar 2007. u 10:57 pm #51700BRANKKOModeratorHey Steff Svaka cast! O0
Samo napred 🙂13. avgust 2007. u 9:54 pm #51701debelizmajUčesnikpodrzavam podrzavam…pisi slobodno O0
14. avgust 2007. u 11:57 am #51702foxbunnyUčesnikSa podrskom ili bez, Broke will never stop. :biggrin:
14. avgust 2007. u 12:11 pm #51703BrokeBodyUčesnikOstalo još upravljanje sistemskim uslugama (programi inetd i xinetd), sistemske usluge jezgra, sistemske usluge datoteka, sistemske Internet usluge, i sistemske usluge za usklađivanje vremena, kako bi cela ova priča o sistemskim uslugama bila kompletna. Nešto od toga sam već odavno završio. Samo da regulišem drugu turu ispita.
14. avgust 2007. u 12:18 pm #51704tomajaGlavni majstorSticky it is 🙂
linux4life
17. avgust 2007. u 8:19 pm #51705marelliUčesnikAlal vera druze,samo kako te nije mrzelo da toliko kucas?
:biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin:
17. avgust 2007. u 9:18 pm #51706BrokeBodyUčesnikMalo po malo. Nisam iskucao za dan. ::)
-
AutorČlanci
Moraš biti prijavljen da bi postavio komentar u ovoj temi.