RHCSA-sarja: Prosessinhallinta RHEL 7:ssä: Käynnistys, sammutus ja kaikki siltä väliltä – Osa 5


Aloitamme tämän artikkelin yleisellä ja lyhyellä tarkistuksella siitä, mitä on tapahtunut siitä hetkestä lähtien, kun painat virtapainiketta käynnistääksesi RHEL 7 -palvelimesi, kunnes saat kirjautumistunnuksen. näyttö komentorivikäyttöliittymässä.

Huomatkaa että:

1. samat perusperiaatteet pätevät, ehkä pienin muutoksin, myös muihin Linux-jakeluihin, ja
2. Seuraavan kuvauksen ei ole tarkoitus esittää tyhjentävästi käynnistysprosessia, vaan ainoastaan perusasiat.

Linuxin käynnistysprosessi

1. POST (Power On Self Test) alustaa ja suorittaa laitteistotarkistuksia.

2. Kun POST on valmis, järjestelmän ohjaus siirtyy ensimmäisen vaiheen käynnistyslataimelle, joka tallennetaan joko jommankumman kiintolevyn käynnistyssektoriin (vanhemmat BIOSia ja MBR:ää käyttävät järjestelmät) tai erillinen (U)EFI-osio.

3. Ensimmäisen vaiheen käynnistyslatain lataa sitten toisen vaiheen käynnistyslataimen, tavallisesti GRUB (GRand Unified Boot Loader), joka sijaitsee /boot, joka puolestaan lataa ytimen ja alkuperäisen RAM-pohjaisen tiedostojärjestelmän (tunnetaan myös nimellä initramfs, joka sisältää ohjelmia ja binaaritiedostoja, jotka suorittavat tarvittavat toiminnot liitä todellinen juuritiedostojärjestelmä).

4. Meillä on aloitusnäyttö, jonka avulla voimme valita käynnistettävän käyttöjärjestelmän ja ytimen:

5. Ydin määrittää järjestelmään liitetyn laitteiston ja kun juuritiedostojärjestelmä on asennettu, käynnistää prosessin PID 1:llä, joka puolestaan alustaa muut prosessit ja esittää meille kirjautumiskehotteen kanssa.

Huomaa: jos haluamme tehdä niin myöhemmin, voimme tutkia tämän prosessin yksityiskohtia käyttämällä dmesg-komentoa ja suodattaa sen tulosteet työkaluillamme. on selitetty tämän sarjan aiemmissa artikkeleissa.

Yllä olevassa esimerkissä käytimme hyvin tunnettua ps-komentoa näyttääksemme luettelon nykyisistä prosesseista, joiden pääprosessi (tai toisin sanoen prosessi, joka aloitti ne) on järjestelmällinen. > (järjestelmä- ja palveluhallinta, johon useimmat nykyaikaiset Linux-jakelut ovat siirtyneet) järjestelmän käynnistyksen aikana:

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

Muista, että -o-lipun (lyhenne sanoista –format) voit esittää ps-tuloksen mukautetussa muodossa tarpeidesi mukaan käyttämällä avainsanat, jotka on määritetty MAN PS -kohdassa STANDARD FORMAT SPECIFIFERS -osiossa.

Toinen tapaus, jossa haluat määrittää ps:n lähdön oletusarvon sijaan, on silloin, kun sinun on löydettävä prosesseja, jotka aiheuttavat merkittävää suorittimen ja/tai muistin kuormitusta, ja lajitella ne vastaavasti:

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)

Johdatus SystemD:hen

Harvat päätökset Linux-maailmassa ovat aiheuttaneet enemmän kiistoja kuin systemd:n käyttöönotto suurissa Linux-jakeluissa. Systemdin puolestapuhujat mainitsevat tärkeimpinä etuinaan seuraavat tosiasiat:

Lue myös: Tarina "init" ja "systemd" takana

1. Systemd mahdollistaa suuremman käsittelyn suorittamisen rinnakkain järjestelmän käynnistyksen aikana (toisin kuin vanhempi SysVinit, joka on aina yleensä hitaampi, koska se käynnistää prosessit yksitellen, tarkistaa jos yksi on riippuvainen toisesta, ja odottaa sitten demonien käynnistymistä, jotta lisää palveluita voi alkaa) ja

2. Se toimii dynaamisena resurssienhallintana käynnissä olevassa järjestelmässä. Siten palvelut käynnistetään tarvittaessa (jotta vältytään kuluttamasta järjestelmäresursseja, jos niitä ei käytetä) sen sijaan, että ne käynnistettäisiin ilman pätevää syytä käynnistyksen aikana.

3. Taaksepäin yhteensopivuus SysVinit-skriptien kanssa.

Systemd on systemctl-apuohjelman hallinnassa. Jos olet kotoisin SysVinit-taustasta, tunnet todennäköisesti seuraavat asiat:

  1. palvelutyökalu, jota - vanhemmissa järjestelmissä - käytettiin SysVinit-skriptien hallintaan, ja
  2. chkconfig-apuohjelma, jonka tarkoituksena oli päivittää ja kysellä järjestelmäpalveluiden ajotason tietoja.
  3. sammutus, jota sinun on täytynyt käyttää useita kertoja joko käynnistääksesi uudelleen tai pysäyttääksesi käynnissä olevan järjestelmän.

Seuraava taulukko näyttää yhtäläisyydet näiden vanhojen työkalujen ja systemctl-työkalujen välillä:

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 esitteli myös yksiköiden (joka voi olla joko palvelu, liitospiste, laite tai verkkopistoke) ja kohteiden käsitteet (näin systemd onnistuu käynnistämään useita toisiinsa liittyviä prosesseja samanaikaisesti aikaa, ja sitä voidaan pitää – vaikkakaan ei yhtäläisenä – ajotasojen vastineena SysVinit-pohjaisissa järjestelmissä.

Yhteenvetona

Muita prosessinhallintaan liittyviä tehtäviä ovat muun muassa kyky:

1. Säädä suoritusprioriteettia prosessin järjestelmäresurssien käytön osalta:

Tämä saavutetaan renice-apuohjelman avulla, joka muuttaa yhden tai useamman käynnissä olevan prosessin ajoitusprioriteettia. Yksinkertaisesti sanottuna ajoitusprioriteetti on ominaisuus, jonka avulla ydin (esillä versioissa => 2.6) voi varata järjestelmäresursseja määritetyn suoritusprioriteetin mukaisesti (eli hienous, alueella -20 - 19) tietystä prosessista.

Sanan renice perussyntaksi on seuraava:

renice [-n] priority [-gpu] identifier

Yllä olevassa yleisessä komennossa ensimmäinen argumentti on käytettävä prioriteettiarvo, kun taas toinen argumentti voidaan tulkita prosessin tunnuksiksi (joka on oletusasetus), prosessiryhmätunnuksiksi, käyttäjätunnuksiksi tai käyttäjänimet. Tavallinen käyttäjä (muu kuin pääkäyttäjä) voi muokata vain omistamansa prosessin ajoitusprioriteettia ja vain lisätä hienoustasoa (mikä tarkoittaa vähemmän järjestelmäresurssien käyttöä).

2. Tapa (tai keskeytä normaali suoritus) prosessi tarvittaessa:

Tarkemmin sanottuna prosessin tappaminen oikeuttaa lähettämään sille signaalin joko viimeistelemään sen suorittaminen sulavasti (SIGTERM=15) tai välittömästi (SIGKILL=9) tappamisen tai pkillin kautta. komentoja.

Ero näiden kahden työkalun välillä on se, että ensimmäistä käytetään tietyn prosessin tai prosessiryhmän lopettamiseen kokonaan, kun taas jälkimmäinen antaa sinun tehdä saman nimen ja muiden attribuuttien perusteella.

Lisäksi pkill toimitetaan mukana pgrep:llä, joka näyttää PID:t, joihin pkill vaikuttaa. Esimerkiksi ennen juoksua:

pkill -u gacanepa

Saattaa olla hyödyllistä tarkastella yhdellä silmäyksellä, mitkä ovat gacanepan omistamat PID:t:

pgrep -l -u gacanepa

Oletuksena sekä kill että pkill lähettävät SIGTERM-signaalin prosessiin. Kuten yllä mainitsimme, tämä signaali voidaan jättää huomiotta (kun prosessi päättyy tai lopullisesti), joten kun sinun on vakavasti keskeytettävä käynnissä oleva prosessi pätevällä syyllä, sinun on määritettävä SIGKILL > signaali komentorivillä:

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 

Johtopäätös

Tässä artikkelissa olemme selittäneet käynnistysprosessin perusteet RHEL 7 -järjestelmässä ja analysoineet joitain käytettävissä olevia työkaluja, jotka auttavat sinua prosessien hallinnassa yleisten apuohjelmien avulla. ja systemd-kohtaiset komennot.

Huomaa, että tämän luettelon ei ole tarkoitus kattaa kaikkia tämän aiheen kelloja ja pillejä, joten voit lisätä omat haluamasi työkalut ja komennot tähän artikkeliin käyttämällä alla olevaa kommenttilomaketta. Myös kysymykset ja muut kommentit ovat tervetulleita.