RHCSA sērija: Procesu pārvaldība RHEL 7: sāknēšana, izslēgšana un viss starplaikos - 5. daļa


Mēs sāksim šo rakstu ar vispārēju un īsu pārskatu par to, kas notiek kopš brīža, kad nospiežat barošanas pogu, lai ieslēgtu RHEL 7 serveri, līdz komandrindas saskarnē tiek parādīts pieteikšanās ekrāns.

Lūdzu, ņemiet vērā, ka:

1. tie paši pamatprincipi ar varbūt nelielām izmaiņām attiecas arī uz citiem Linux izplatījumiem un
2. Šis apraksts nav paredzēts pilnīgam sāknēšanas procesa skaidrojumam, bet tikai pamatprincipiem.

Linux sāknēšanas process

1. POST (Power On Self Test) inicializē un veic aparatūras pārbaudes.

2. Kad POST ir pabeigts, sistēmas vadība tiek nodota pirmā posma sāknēšanas iekrāvējam, kas tiek glabāts vai nu viena no cietajiem diskiem sāknēšanas sektorā (vecākām sistēmām, kurās tiek izmantota BIOS un MBR), vai arī īpašā (U) EFI. nodalījums.

3. Pēc tam pirmās pakāpes sāknēšanas iekrāvējs ielādē otrās pakāpes sāknēšanas iekrāvēju, visbiežāk GRUB (GRand Unified Boot Loader), kas atrodas iekšpusē/sāknēšanas ierīcē, kas savukārt ielādē kodolu un sākotnējo uz RAM balstīto failu sistēmu (pazīstama arī kā initramfs). , kas satur programmas un bināros failus, kas veic nepieciešamās darbības, lai galu galā pievienotu faktisko sakņu failu sistēmu).

4. Mums tiek parādīts uzplaiksnījuma ekrāns, kas ļauj mums izvēlēties operētājsistēmu un kodolu sāknēšanai:

5. Kodols iestata sistēmai pievienoto aparatūru un pēc saknes failu sistēmas uzstādīšanas uzsāk procesu ar PID 1, kas savukārt inicializēs citus procesus un parādīs mums pieteikšanās uzvedni.

Piezīme. Ja mēs vēlamies to izdarīt vēlāk, mēs varam pārbaudīt šī procesa specifiku, izmantojot komandu dmesg un filtrējot tā izvadi, izmantojot rīkus, kurus esam izskaidrojuši iepriekšējos šīs sērijas rakstos.

Iepriekš minētajā piemērā mēs izmantojām plaši pazīstamo komandu ps, lai parādītu to pašreizējo procesu sarakstu, kuru vecākprocess (vai citiem vārdiem sakot, process, kas tos sāka) ir systemd (sistēmas un pakalpojumu pārvaldnieks, kuru pārslēgusi lielākā daļa mūsdienu Linux izplatīšanas to) sistēmas startēšanas laikā:

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

Atcerieties, ka -o karodziņš (saīsinājums no –formāts) ļauj jums parādīt ps izvadi pielāgotā formātā, kas atbilst jūsu vajadzībām, izmantojot atslēgvārdus, kas norādīti man ps sadaļā STANDART FORMAT SPECIFIERS.

Vēl viens gadījums, kad jūs vēlaties definēt ps izvadi, nevis turpināt noklusējumu, ir tas, kad jums jāatrod procesi, kas izraisa ievērojamu CPU un/vai atmiņas slodzi, un attiecīgi jāšķiro:

# 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)

Ievads SystemD

Daži lēmumi Linux pasaulē ir izraisījuši vairāk pretrunu nekā sistēmas ieviešana lielākajos Linux izplatījumos. Systemd aizstāv šādus faktus kā galvenās priekšrocības:

Lasiet arī: Stāsts aiz ‘init’ un ‘systemd’

1. Systemd ļauj paralēli veikt vairāk apstrādes sistēmas palaišanas laikā (atšķirībā no vecākas SysVinit, kas vienmēr mēdz būt lēnāka, jo tā sāk procesus pa vienam, pārbauda, vai viens ir atkarīgs no otra, un pēc tam gaida, kad dēmoni tiks palaisti. var sākt vairāk pakalpojumu), un

2. Tas darbojas kā dinamiska resursu pārvaldība darbojošā sistēmā. Tādējādi pakalpojumi tiek startēti pēc nepieciešamības (lai izvairītos no sistēmas resursu patērēšanas, ja tie netiek izmantoti), nevis tiek palaisti bez derīga iemesla sāknēšanas laikā.

3. Saderība ar SysVinit skriptiem atpakaļ.

Systemd kontrolē utilīta systemctl. Ja nākat no SysVinit fona, visticamāk, jūs būsiet pazīstami ar:

  1. servisa rīks, kas šajās vecākajās sistēmās tika izmantots, lai pārvaldītu SysVinit skriptus, un
  2. chkconfig utilīta, kuras mērķis bija sistēmas pakalpojumu darbības līmeņa informācijas atjaunināšana un pieprasīšana.
  3. izslēgšana, kuru, iespējams, esat izmantojis vairākas reizes, lai restartētu vai apturētu darbojošos sistēmu.

Šajā tabulā parādīta šo mantoto rīku un sistēmasctl izmantošanas līdzība:

Systemd arī ieviesa vienību (kas var būt vai nu pakalpojums, pievienošanas punkts, ierīce vai tīkla kontaktligzda) un mērķu (tas ir tas, kā systemd izdodas sākt vairākus saistītus procesus vienlaikus), un tos var uzskatīt par šādiem jēdzieniem: lai arī tas nav vienāds - tas ir līdzvērtīgs darbības līmeņiem SysVinit balstītās sistēmās.

Summējot

Citi ar procesa vadību saistīti uzdevumi ietver, bet var neaprobežoties ar spēju:

Tas tiek panākts, izmantojot renice utilītu, kas maina viena vai vairāku darbojošos procesu plānošanas prioritāti. Vienkārši sakot, plānošanas prioritāte ir funkcija, kas ļauj kodolam (esošajā versijā => 2.6) piešķirt sistēmas resursus atbilstoši noteiktajai procesa izpildes prioritātei (aka jaukums, diapazonā no -20 līdz 19).

Renice pamata sintakse ir šāda:

# renice [-n] priority [-gpu] identifier

Iepriekšminētajā vispārīgajā komandā pirmais arguments ir izmantojamā prioritārā vērtība, bet otru argumentu var interpretēt kā procesa ID (kas ir noklusējuma iestatījums), procesu grupas ID, lietotāju ID vai lietotāju vārdus. Parasts lietotājs (izņemot root) var modificēt tikai viņam piederošā procesa plānošanas prioritāti un tikai palielināt jaukuma līmeni (kas nozīmē mazāk sistēmas resursu izmantošanu).

Precīzāk sakot, procesa nogalināšana dod tiesības nosūtīt tam signālu vai nu graciozi pabeigt (SIGTERM = 15), vai nekavējoties (SIGKILL = 9), izmantojot komandas kill vai pkill.

Atšķirība starp šiem diviem rīkiem ir tā, ka pirmais tiek izmantots, lai pilnībā izbeigtu noteiktu procesu vai procesu grupu, bet otrais ļauj to darīt, pamatojoties uz nosaukumu un citiem atribūtiem.

Turklāt pkill ir komplektā ar pgrep, kas parāda PID, kas tiks ietekmēti, ja izmantosiet pkill. Piemēram, pirms palaišanas:

# pkill -u gacanepa

Var būt noderīgi īsumā apskatīt, kuri PAC pieder gacanepai:

# pgrep -l -u gacanepa

Pēc noklusējuma gan kill, gan pkill nosūta SIGTERM signālu procesam. Kā jau minējām iepriekš, šo signālu var neņemt vērā (kamēr process pabeidz izpildi vai uz visiem laikiem), tādēļ, kad jums nopietni jāpārtrauc darbības process ar pamatotu iemeslu, komandrindā būs jānorāda SIGKILL signāls:

# 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 

Secinājums

Šajā rakstā mēs esam izskaidrojuši sāknēšanas procesa pamatus RHEL 7 sistēmā un analizējuši dažus pieejamos rīkus, lai palīdzētu jums pārvaldīt procesus, izmantojot parastos utilītus un sistēmai raksturīgas komandas.

Ņemiet vērā, ka šis saraksts nav paredzēts, lai aptvertu visus šīs tēmas zvaniņus un svilpes, tāpēc pievienojiet šim rakstam savus vēlamos rīkus un komandas, izmantojot zemāk esošo komentāru veidlapu. Arī jautājumi un citi komentāri ir laipni gaidīti.