Serija RHCSA: Upravljanje procesima u RHEL 7: pokretanje, gašenje i sve između – 5. dio


Započećemo ovaj članak općom i kratkom revizijom onoga što se dešava od trenutka kada pritisnete dugme za Napajanje da uključite svoj RHEL 7 server sve dok vam se ne prikaže prijava ekran u interfejsu komandne linije.

Imajte na umu da:

1. isti osnovni principi se primjenjuju, uz možda manje izmjene, i na druge Linux distribucije, i
2. Sljedeći opis nema za cilj da predstavlja iscrpno objašnjenje procesa pokretanja, već samo osnove.

Proces pokretanja Linuxa

1. POST (Samotestiranje pri uključivanju) inicijalizira i vrši provjere hardvera.

2. Kada se POST završi, kontrola sistema se prosljeđuje na prvostepeni pokretački program, koji je pohranjen na bilo koji sektor za pokretanje jednog od tvrdih diskova (za starije sisteme koji koriste BIOS i MBR) ili namjensku (U)EFI particiju.

3. Prvi stepen pokretanja zatim učitava drugi stepen pokretanja, najčešće GRUB (GRand Unified Boot Loader), koji se nalazi unutar /boot, koji zauzvrat učitava kernel i početni sistem datoteka zasnovan na RAM-u (također poznat kao initramfs, koji sadrži programe i binarne datoteke koje izvode potrebne radnje potrebne za konačno montirati stvarni korijenski sistem datoteka).

4. Predstavljen nam je početni ekran koji nam omogućava da odaberemo operativni sistem i kernel za pokretanje:

5. Kernel postavlja hardver vezan za sistem i nakon što je korijenski sistem datoteka montiran, pokreće proces sa PID 1, koji će zauzvrat inicijalizirati druge procese i predstaviti nas sa upitom za prijavu.

Napomena: Ako to želimo učiniti kasnije, možemo ispitati specifičnosti ovog procesa pomoću naredbe dmesg i filtrirati njegov izlaz pomoću alata koje mi objasnili u prethodnim člancima ove serije.

U gornjem primjeru, koristili smo dobro poznatu naredbu ps da prikažemo listu trenutnih procesa čiji je roditeljski proces (ili drugim riječima, proces koji ih je pokrenuo) systemd > (upravitelj sistema i usluga na koji je većina modernih Linux distribucija prešla) tokom pokretanja sistema:

ps -o ppid,pid,uname,comm --ppid=1

Zapamtite da zastavica -o (skraćenica od –format) omogućava da prikažete izlaz ps u prilagođenom formatu koji odgovara vašim potrebama koristeći ključne riječi navedene u odjeljku Standardni FORMAT SPECIFIERS u man ps.

Drugi slučaj u kojem ćete htjeti definirati izlaz ps umjesto da idete sa zadanim postavkama je kada trebate pronaći procese koji uzrokuju značajno opterećenje CPU-a i/ili memorije i sortirati ih u skladu s tim:

ps aux --sort=+pcpu              # Sort by %CPU (ascending)
ps aux --sort=-pcpu              # Sort by %CPU (descending)
ps aux --sort=+pmem              # Sort by %MEM (ascending)
ps aux --sort=-pmem              # Sort by %MEM (descending)
ps aux --sort=+pcpu,-pmem        # Combine sort by %CPU (ascending) and %MEM (descending)

Uvod u SystemD

Nekoliko odluka u svijetu Linuxa izazvalo je više kontroverzi od usvajanja systemda od strane glavnih Linux distribucija. Zagovornici Systemd-a kao svoje glavne prednosti navode sljedeće činjenice:

Pročitajte također: Priča iza 'init' i 'systemd'

1. Systemd omogućava da se više obrade obavi paralelno tokom pokretanja sistema (za razliku od starijeg SysVinit, koji uvijek ima tendenciju da bude sporiji jer pokreće procese jedan po jedan, provjerava ako jedno zavisi od drugog, a zatim čeka da se demoni pokrenu kako bi se moglo pokrenuti više usluga), i

2. Radi kao dinamičko upravljanje resursima u sistemu koji radi. Dakle, usluge se pokreću kada je potrebno (kako bi se izbjeglo trošenje sistemskih resursa ako se ne koriste) umjesto da se pokreću bez valjanog razloga tokom pokretanja.

3. Kompatibilnost unatrag sa SysVinit skriptama.

Sistem kontroliše systemctl uslužni program. Ako dolazite iz SysVinit pozadine, velike su šanse da ćete biti upoznati sa:

  1. servis alat, koji je -u tim starijim sistemima - korišten za upravljanje SysVinit skriptama, i
  2. uslužni program chkconfig, koji je služio za ažuriranje i ispitivanje informacija na nivou pokretanja za sistemske usluge.
  3. isključivanje, koje ste sigurno koristili nekoliko puta da biste ponovo pokrenuli ili zaustavili sistem koji radi.

Sljedeća tabela pokazuje sličnosti između upotrebe ovih naslijeđenih alata i systemctl:

Legacy tool Systemctl equivalent Description
service name start systemctl start name Start name (where name is a service)
service name stop systemctl stop name Stop name
service name condrestart systemctl try-restart name Restarts name (if it’s already running)
service name restart systemctl restart name Restarts name
service name reload systemctl reload name Reloads the configuration for name
service name status systemctl status name Displays the current status of name
service –status-all systemctl Displays the status of all current services
chkconfig name on systemctl enable name Enable name to run on startup as specified in the unit file (the file to which the symlink points). The process of enabling or disabling a service to start automatically on boot consists in adding or removing symbolic links inside the /etc/systemd/system directory.
chkconfig name off systemctl disable name Disables name to run on startup as specified in the unit file (the file to which the symlink points)
chkconfig –list name systemctl is-enabled name Verify whether name (a specific service) is currently enabled
chkconfig –list systemctl –type=service Displays all services and tells whether they are enabled or disabled
shutdown -h now systemctl poweroff Power-off the machine (halt)
shutdown -r now systemctl reboot Reboot the system

Systemd je također uveo koncepte jedinica (koje mogu biti ili usluga, tačka montiranja, uređaj ili mrežna utičnica) i ciljeva (na taj način systemd uspijeva pokrenuti nekoliko povezanih procesa istovremeno vrijeme, i može se smatrati - iako ne jednakim - ekvivalentom nivoa pokretanja u sistemima baziranim na SysVinitu.

Sažimanje

Ostali zadaci koji se odnose na upravljanje procesima uključuju, ali ne mogu biti ograničeni na, sposobnost:

1. Podesite prioritet izvršenja što se tiče upotrebe sistemskih resursa za proces:

Ovo se postiže pomoću renice uslužnog programa, koji mijenja prioritet planiranja jednog ili više pokrenutih procesa. Jednostavno rečeno, prioritet planiranja je funkcija koja omogućava kernelu (prisutno u verzijama => 2.6) da dodijeli sistemske resurse prema dodijeljenom prioritetu izvršavanja (također ljubaznost, u rasponu od -20 do 19) određenog procesa.

Osnovna sintaksa renice je sljedeća:

renice [-n] priority [-gpu] identifier

U generičkoj naredbi iznad, prvi argument je vrijednost prioriteta koja se koristi, dok se drugi argument može tumačiti kao ID-ovi procesa (što je zadana postavka), ID-ovi grupa procesa, ID-ovi korisnika ili korisnička imena. Normalan korisnik (osim root) može samo izmijeniti prioritet planiranja procesa koji posjeduje i samo povećati nivo lepote (što znači da zauzima manje sistemskih resursa).

2. Ubiti (ili prekinuti normalno izvršavanje) procesa po potrebi:

Preciznije rečeno, ukidanje procesa daje pravo da mu se pošalje signal da završi njegovo izvršenje graciozno (SIGTERM=15) ili odmah (SIGKILL=9) kroz kill ili pkill komande.

Razlika između ova dva alata je u tome što se prvi koristi za potpuno okončanje određenog procesa ili grupe procesa, dok vam drugi omogućava da učinite isto na osnovu imena i drugih atributa.

Osim toga, pkill dolazi u paketu sa pgrep, koji vam pokazuje PID-ove na koje će utjecati ako se pkill koristi. Na primjer, prije pokretanja:

pkill -u gacanepa

Može biti korisno da na prvi pogled pogledate koji su PID-ovi u vlasništvu gacanepe:

pgrep -l -u gacanepa

Podrazumevano, i kill i pkill šalju SIGTERM signal procesu. Kao što smo već spomenuli, ovaj signal se može zanemariti (dok proces završi svoje izvršenje ili zauvek), tako da kada ozbiljno trebate zaustaviti pokrenuti proces s valjanim razlogom, morat ćete navesti SIGKILL signal na komandnoj liniji:

kill -9 identifier               # Kill a process or a process group
kill -s SIGNAL identifier        # Idem
pkill -s SIGNAL identifier       # Kill a process by name or other attributes 

Zaključak

U ovom članku objasnili smo osnove procesa pokretanja u sistemu RHEL 7 i analizirali neke od alata koji su vam na raspolaganju da vam pomognu u upravljanju procesima koristeći uobičajene uslužne programe i naredbe specifične za systemd.

Imajte na umu da ova lista nije namijenjena da pokrije sva zvona i zviždaljke ove teme, pa slobodno dodajte svoje željene alate i komande u ovaj članak koristeći formular za komentare ispod. Pitanja i drugi komentari su također dobrodošli.