Vyhledávání na webu

Řada RHCSA: Řízení procesů v RHEL 7: Boot, vypnutí a vše mezi tím – Část 5


Tento článek začneme celkovou a krátkou revizí toho, co se stane od okamžiku, kdy stisknete tlačítko Napájení pro zapnutí serveru RHEL 7, dokud se nezobrazí přihlašovací údaje. obrazovce v rozhraní příkazového řádku.

Vezměte prosím na vědomí, že:

1. stejné základní principy platí, s možná menšími úpravami, také pro ostatní distribuce Linuxu a
2. Následující popis nemá představovat vyčerpávající vysvětlení procesu spouštění, ale pouze základy.

Proces spouštění Linuxu

1. POST (Power On Self Test) inicializuje a provádí hardwarové kontroly.

2. Po dokončení POST je řízení systému předáno zavaděči první fáze, který je uložen buď v spouštěcím sektoru jednoho z pevných disků (u starších systémy využívající BIOS a MBR), nebo vyhrazený (U)EFI oddíl.

3. Zavaděč první fáze pak načte zavaděč druhé fáze, nejčastěji GRUB (GRand Unified Boot Loader), který je umístěn uvnitř /boot, který zase načte jádro a počáteční souborový systém založený na RAM (také známý jako initramfs, který obsahuje programy a binární soubory, které provádějí nezbytné akce potřebné k tomu, aby připojit skutečný kořenový souborový systém).

4. Zobrazí se nám úvodní obrazovka, která nám umožňuje vybrat operační systém a jádro pro zavedení:

5. Jádro nastaví hardware připojený k systému a jakmile bude připojen kořenový souborový systém, spustí proces s PID 1, který zase inicializuje ostatní procesy a představí nám s výzvou k přihlášení.

Poznámka: Pokud si to přejeme udělat později, můžeme prozkoumat specifika tohoto procesu pomocí příkazu dmesg a filtrovat jeho výstup pomocí nástrojů, které vysvětlili v předchozích článcích této série.

Ve výše uvedeném příkladu jsme použili známý příkaz ps k zobrazení seznamu aktuálních procesů, jejichž nadřazený proces (nebo jinými slovy proces, který je spustil) je systemd (správce systému a služeb, na který přešla většina moderních distribucí Linuxu) během spouštění systému:

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

Pamatujte, že příznak -o (zkratka pro –format) vám umožňuje prezentovat výstup ps v přizpůsobeném formátu, který vyhovuje vašim potřebám pomocí klíčová slova specifikovaná v sekci STANDARD FORMAT SPECIFIERS v man ps.

Dalším případem, kdy budete chtít definovat výstup ps místo výchozího nastavení, je situace, kdy potřebujete najít procesy, které způsobují značné zatížení procesoru a/nebo paměti, a podle toho je seřadit:

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)

Úvod do SystemD

Jen málo rozhodnutí ve světě Linuxu způsobilo více kontroverzí než přijetí systemd hlavními distribucemi Linuxu. Zastánci Systemd’s jmenují jako své hlavní výhody následující fakta:

Čtěte také: Příběh za „init“ a „systemd“

1. Systemd umožňuje provádět více zpracování paralelně během spouštění systému (na rozdíl od staršího SysVinit, který má vždy tendenci být pomalejší, protože spouští procesy jeden po druhém, kontroluje pokud jeden závisí na druhém a pak čeká na spuštění démonů, aby se mohly spustit další služby), a

2. Funguje jako dynamická správa zdrojů v běžícím systému. Služby se tedy spouštějí v případě potřeby (aby se předešlo spotřebě systémových prostředků, pokud nejsou používány), místo aby byly spouštěny bez platného důvodu během zavádění.

3. Zpětná kompatibilita se skripty SysVinit.

Systemd je řízen pomocí nástroje systemctl. Pokud pocházíte z prostředí SysVinit, je pravděpodobné, že budete obeznámeni s:

  1. nástroj service, který se v těchto starších systémech používal ke správě skriptů SysVinit, a
  2. obslužný program chkconfig, který sloužil k aktualizaci a dotazování na informace o úrovni běhu pro systémové služby.
  3. vypnutí, které jste museli několikrát použít k restartování nebo zastavení běžícího systému.

Následující tabulka ukazuje podobnosti mezi použitím těchto starších nástrojů a 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 také představil koncepty jednotek (kterými mohou být buď služba, přípojný bod, zařízení nebo síťový soket) a cílů (což je způsob, jakým systemd dokáže spustit několik souvisejících procesů současně čas a lze je považovat – i když ne stejné – za ekvivalent úrovní běhu v systémech založených na SysVinit.

Shrnutí

Mezi další úkoly související s řízením procesů patří mimo jiné schopnost:

1. Upravte prioritu provádění, pokud jde o využití systémových prostředků procesu:

Toho je dosaženo pomocí nástroje renice, který mění prioritu plánování jednoho nebo více běžících procesů. Jednoduše řečeno, priorita plánování je funkce, která umožňuje jádru (přítomnému ve verzích => 2.6) alokovat systémové prostředky podle přiřazené priority provádění (neboli slušnost, v rozsahu od -2019) daného procesu.

Základní syntaxe renice je následující:

renice [-n] priority [-gpu] identifier

Ve výše uvedeném obecném příkazu je prvním argumentem hodnota priority, která se má použít, zatímco druhý argument lze interpretovat jako ID procesu (což je výchozí nastavení), ID skupiny procesů, ID uživatele nebo uživatelská jména. Normální uživatel (jiný než root) může pouze upravit prioritu plánování procesu, který vlastní, a pouze zvýšit úroveň zpříjemnění (což znamená zabrat méně systémových prostředků).

2. Podle potřeby ukončete (nebo přerušte normální provádění) procesu:

Přesněji řečeno, zabití procesu opravňuje poslat mu signál, aby buď dokončil své provedení elegantně (SIGTERM=15) nebo okamžitě (SIGKILL=9) prostřednictvím zabití nebo pkill příkazy.

Rozdíl mezi těmito dvěma nástroji spočívá v tom, že první nástroj se používá k úplnému ukončení konkrétního procesu nebo skupiny procesů, zatímco druhý nástroj umožňuje provést totéž na základě názvu a dalších atributů.

Kromě toho je pkill dodáván spolu s pgrep, který zobrazuje PID, která budou ovlivněna v případě použití pkill. Například před spuštěním:

pkill -u gacanepa

Může být užitečné podívat se na první pohled, která PID vlastní gacanepa:

pgrep -l -u gacanepa

Ve výchozím nastavení kill i pkill odesílají do procesu signál SIGTERM. Jak jsme zmínili výše, tento signál lze ignorovat (když proces dokončí své provádění nebo nadobro), takže když vážně potřebujete zastavit běžící proces s platným důvodem, budete muset zadat SIGKILL signál na příkazovém řádku:

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 

Závěr

V tomto článku jsme vysvětlili základy procesu spouštění v systému RHEL 7 a analyzovali některé nástroje, které jsou k dispozici, aby vám pomohly se správou procesů pomocí běžných nástrojů. a příkazy specifické pro systemd.

Všimněte si, že tento seznam není určen k pokrytí všech zvonků a píšťalek tohoto tématu, takže můžete do tohoto článku přidat své vlastní preferované nástroje a příkazy pomocí formuláře pro komentáře níže. Dotazy a další komentáře jsou také vítány.