GNU/Linux >> Znalost Linux >  >> Linux

Jak spravovat systémové jednotky při spuštění

Systemd je init systém a správce systému v systémech Linux a je kompatibilní s LSB a SysV. Sadu systemd můžete použít ke správě a optimalizaci služeb a prostředků spouštění systému v systému Linux. Je to praktický nástroj pro systémové administrátory, jak uvést svůj systém do provozu, optimalizovat procesy, ladit a odstraňovat problémy se systémovými službami.

Tento článek bude vycházet z našeho průvodce sérií systemd a bude ilustrovat, jak spravovat systémové jednotky, připojení souborových systémů, odstraňovat problémy a poskytne vám tipy a triky při práci se systémy.

Náš první průvodce systemd zdůraznil, proč je systemd praktickým nástrojem pro správce systému Linux. Druhá ilustruje, jak plánovat systémové úlohy pomocí časovačů systemd a jak automatizovat únavné úlohy spouštění systému.

Spuštění Linuxu

Jako retro uživatel Linuxu jsem vždy existoval (stále existuji), když se systém Fedory zavede a stránky na stránkách diagnostických zpráv se posouvají před výzvou k přihlášení. Tyto stránky obsahují informace o procesech spouštění, připojení souborových systémů a mnoho dalšího. Chcete-li porozumět tomu, jak spravovat a optimalizovat spouštěcí služby, pojďme se rychle podívat na to, co se odehrává mezi stisknutím tlačítka pro zapnutí a výzvou k přihlášení.

Zaváděcí proces začíná hardwarovým spouštěním, které inicializuje systémový hardware, spouštěním OS, které načítá jádro, poté systemd a spuštěním Linuxu, kde systemd připravuje systémové procesy. Proces spouštění začíná, když jádro předá kontrolu nad hostitelem systemd. V tomto okamžiku může správce systému spravovat služby, jednotky, sokety, aktivaci D-Bus, sledovat procesy, démony a přípojné body souborového systému.

Systémové komponenty

Níže jsou uvedeny některé stavební bloky softwarové sady systemd, které můžete použít ke správě spouštění systému Linux.

  • systemd-boot – správce spouštění UEFI.
  • systemd-firstboot – spravuje základní inicializaci nastavení systému před prvním spuštěním.
  • systemd-logind – nástroj pro správu relací.
  • systemd-networkd – správa konfigurace sítě.
  • systemd-sysusers  – nástroj pro vytváření skupin uživatelů systému a přidávání uživatelů do skupin při spouštění.
  • systemd/Journal – správa protokolování systému.
  • systemd/Timers — časovače pro ovládání souborů .service nebo událostí.

Systemctl

Ke správě systemd použijte příkaz systemctl, který využívá jak funkcionalitu služby SysVinit, tak chkconfig. Můžete jej použít ke správě systémových jednotek, které představují systémové služby a prostředky.

# systemctl daemon-reload

Správa systémové jednotky

Jednotky v systemd mohou být služby (.service), přípojné body (.mount), zařízení (.device) nebo zásuvky (.socket). Systemctl poskytuje různé příkazy pro správu jednotek.

K analýze stavu systému použijte následující příkaz:

$ stav systemctl #Zobrazit stav systému $ systemctl nebo #Seznam spuštěných jednotek$ seznam-jednotek systemctl #Seznam spuštěných jednotek$ systemctl --failed #Seznam neúspěšných jednotek$ seznam-souborů jednotek systemctl #Seznam souborů nainstalovaných jednotek1$ stav systemctl pid #Zobrazit stav procesu pro PID

Ke kontrole stavu jednotky použijte následující příkazy:

$ jednotka nápovědy systemctl #Zobrazit manuálovou stránku spojenou s jednotkou$ stavová jednotka systemctl #Stav jednotky$ jednotka systemctl je povolena #Zkontrolujte, zda je jednotka povolena

Ke spuštění a opětovnému načtení jednotky použijte následující příkazy:

spuštění jednotky systemctl #okamžité spuštění jednotkysystemctl zastavení jednotky #okamžité zastavení jednotkysystemctl restart jednotky #restart jednotky znovu načtení jednotky systemctl #znovu načtení jednotky a konfiguracísystemctl démon-reload #znovu načtení konfigurace správce systemd

K maskování jednotky použijte následující příkazy:

systemctl maskovat jednotku #mask a Unit, aby nebylo možné spustitsystemctl demaskovat jednotku #Unmask a unit

K povolení jednotky použijte následující příkazy:

systemctl enable Unit #enable a Unit to start at bootsystemctl enable -- now unit #enable Unit to spustit automaticky a okamžitě při bootsystemctl deaktivovat jednotku #disable Unit, aby se již nespouštěla ​​při bootsystemctl znovu povolit jednotku #disable and enable new 

Úprava souborů jednotek

Linux načítá soubory Unit z více míst ve vašem systému. Úplný seznam zobrazíte spuštěním příkazu [systemctl show –property=UnitPath].

  •  /usr/lib/systemd/system/:jednotky poskytované nainstalovanými balíčky.
  •  /etc/systemd/system/:jednotky nainstalované správcem systému.

Příklad souboru jednotky:

/etc/systemd/system/unit.d/example_unit.conf[Unit]Requires=new dependencyAfter=new dependency

Zpracování závislostí

Závislosti jednotek můžete vyřešit správným navržením souborů jednotek.
Pokud například jednotka A vyžaduje spuštění jednotky B před spuštěním jednotky A. Potom přidejte Requires=B a After=B do sekce [Jednotka] A.

# /etc/systemd/system/unit.d/example_unit.conf[Unit]Requires=BAfter=B

Pokud je závislost volitelná, přidejte Wants=B a After=B.

/etc/systemd/system/unit.d/example_unit.conf[Unit]Vyžaduje=BAfter=BWants=B

Poznámka:Závislosti jsou umístěny na službách a ne na cílech.

Typy služeb

Můžete nastavit různé typy spouštěcích služeb v souboru vlastní služby pomocí parametru Type=v sekci [Service]:

/etc/systemd/system/unit.d/example_unit.conf[Unit]Requires=BAfter=BWants=B[Service]Type=simple
  • Typ=simple (výchozí):systemd považuje službu za okamžité spuštění.
  • Typ=forking:systemd považuje službu za spuštěnou, jakmile se proces rozvětví a nadřazený proces se ukončí.
  • Typ=oneshot:Můžete jej použít pro skripty, které provádějí jednu úlohu a poté se ukončí. Můžete nastavit RemainAfterExit=yes, aby systemd mohl službu i po ukončení procesu považovat za aktivní.
  • Typ=idle:systemd zdrží provedení binárního kódu služby, dokud nebudou odeslány všechny úlohy.
  • Type=notify:Můžete to použít jako Type=simple, ale když bude připraven, dá démon signál systemd.
  • Typ=dbus:služba je považována za připravenou, když se na systémové sběrnici DBus objeví zadaný BusName.

Soubory náhradní jednotky

Soubor jednotky v [/usr/lib/systemd/system/] můžete nahradit vytvořením nového souboru jednotky s podobným názvem a znovu povolit jednotce aktualizaci symbolických odkazů.

# systemctl znovu povolit jednotku

Případně můžete spustit příkaz [# systemctl edit –full Unit], který otevře soubor jednotky ve vašem editoru a po dokončení úprav jej automaticky znovu načte.

# systemctl edit --full Unit

Drop-in soubory

Soubor spouštěcí jednotky můžete vytvořit vytvořením adresáře /etc/systemd/system/unit.d/ a umístěním nového souboru .conf. Soubor přepíše nebo přidá nové možnosti konfigurace. systemd analyzuje a aplikuje tyto soubory na původní soubor jednotky.

Případně spusťte následující příkaz [# systemctl edit unit] k otevření souboru /etc/systemd/system/unit.d/new_override.conf v textovém editoru a automaticky znovu načte soubor Unit.

Vrátit změny souboru jednotky

Pomocí následujícího příkazu vrátíte zpět všechny změny, které jste provedli na jednotce pomocí příkazu systemctl edit.

# systemctl revert unit

Přidejte další závislost k jednotce

/etc/systemd/system/unit.d/newcustomdependency.conf[Unit]Requires=new customdependencyAfter=new customdependency

Správa napájení

Systemd poskytuje různé příkazy pro restartování nebo vypnutí vašeho systému.

restartovat systemctl #vypnout a restartovat systemsystemctl vypnout #vypnout a vypnout systemsystemctl pozastavit #pozastavit systemsystemctl hibernace #uved system do hibernace systemctl hybrid-spánek #uveď systém do hybridního spánku

Připojit systémy souborů a oddíly

systemd má na starosti připojení oddílů a souborových systémů specifikovaných v /etc/fstab. Souborový systém můžete spravovat nebo připojit definováním všech požadovaných parametrů v souboru jednotky. Zahrňte podrobnosti o souborovém systému a přípojném bodu. Systemd vám poskytuje větší flexibilitu při práci s montážními jednotkami. Pro konfiguraci a připojení souborového systému používá soubor /etc/fstab. Tento proces zahrnuje použití nástroje systemd-fstab-generator k vytvoření připojovacích jednotek z dat v souboru fstab.

Vytvořte systémovou montážní jednotku

Obrázek je na Fedoře 33 se systémem souborů btrfs.
Ověřte, že máte volné místo ve skupině svazků.

# lsblk

Seznam dostupných souborů přípojných jednotek:

[root@foss]# systemctl list-unit-files -t mountOR[root@foss]# systemctl status *mount

Vytvořte soubor jednotky systemd .mount:

Zkontrolujte UUID souborového systému pomocí příkazu blkid.

[root@foss]# blkid /dev/sda2/dev/sda2:LABEL="fedoraworkstation33" UUID="688a6af2-xxx-4da4-xxx-878c5b0f063b" UUID_SUB="690a86e994ayc6494ayyyyyyyyy BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="0byyyb88-02"

Vytvořte nový soubor [var-lib-docker.mount] v adresáři etc/systemd/system. Níže přidejte konfigurační data. Pamatujte, že název souboru jednotky a bod připojení musí být identické.

# vi /etc/systemd/system/var-lib-docker.mount[Unit]Description=docker mount[Mount]What=/dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063bWhere=/var/lib/dockerType=btrfsOptions=defaults[Install]WantedBy=multi-user.target

Všimněte si, že argument „co“ může mít UUID, LABEL a cestu k disku.

Popis v sekci [Jednotka] poskytuje název připojení, který se zobrazuje s připojením systemctl -t. Konfigurační data v sekci [Mount] obsahují stejná data v souboru fstab.

Povolte spuštění montážní jednotky po spuštění:

[root@foss]# systemctl povolit var-lib-docker.mountVytvořen symbolický odkaz /etc/systemd/system/multi-user.target.wants/var-lib-docker.mount → /etc/systemd/system/var -lib-docker.mount.

Příkaz vytvoří symbolický odkaz v adresáři /etc/systemd/system, který umožní připojení mount Unit při všech následujících bootech.

Spusťte a připojte souborový systém:

# systemctl start var-lib-docker.mount

Ověřte, že byl souborový systém připojen:

# systemctl status var-lib-docker.mount● var-lib-docker.mount - Docker mountLoaded:načteno (/etc/systemd/system/var-lib-docker.mount; povoleno; přednastaveno dodavatelem:zakázáno)Aktivní :neaktivní (mrtvý)Kde:/var/lib/dockerWhat:/dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063b

Můžete také upravit soubor servisní jednotky dockeru, abyste zajistili, že se služba spustí až po zavolání služby připojení.

# cat /usr/lib/systemd/system/docker.service[Unit]Description=docker service unit fileAfter=network.target var-lib-docker.mount # Přidána připojovací jednotka pro službu docker pro čekáníRequires=docker.socket 

Restartujte a zkontrolujte stav servisní jednotky připojení.

# systemctl reboot# stav systemctl var-lib-docker.mount

Zkontrolujte přípojný bod [var-lib-docker]:

Tipy a triky

Spustit službu po připojení sítě

Spuštění služby můžete odložit, dokud nebude síť spuštěna přidáním následujících závislostí do souboru .service.

/etc/systemd/system/test_foo.service[Unit]Wants=network-online.targetAfter=network-online.target

Navíc můžete přidat nss-lookup.target, pokud služba potřebuje provádět dotazy DNS.

/etc/systemd/system/test_foo.service[Unit]Wants=network-online.targetAfter=network-online.target nss-lookup.target...

Pomocí následujícího příkazu zkontrolujte, která služba stahuje nss-lookup.target.

# systemctl list-dependencies --reverse nss-lookup.target

Nainstalujte konfigurační nástroje GUI systemd

Se systemd můžete také pracovat pomocí následujících nástrojů GUI.

  • SystemdGenie – je nástroj pro správu systemd založený na KDE.
  • Systemadm – je grafický prohlížeč pro systemd jednotky.

optimalizace systemd

Systemd nabízí rychlé bootování <2s pro aktuální desktopová prostředí. Mohli bychom jej však dále optimalizovat, aniž bychom museli psát jakýkoli kód pomocí následujících kroků:

  •  Nejprve zvažte vynechání initrd, pokud jej ve svém systému používáte.
  • Zvažte deaktivaci SELinuxu a auditování přidáním selinux=0 na příkazový řádek jádra. Pamatujte však, že správci systému doporučují z bezpečnostních důvodů ponechat SElinux zapnutý.
  • Zvažte odinstalaci Syslog a místo toho použijte deník. Žurnál je výchozí protokolovací nástroj v novějších systemd systémech.
  • Pokud je výstup vaší konzole pomalý, použijte příznak tichý na příkazovém řádku a vypněte protokolování ladění systému.
  • Zvažte odstranění cronu a místo toho použijte systémové časovače.
  • Používejte moderní desktopové prostředí, jako je GNOME 40, které nestahuje ConsoleKit.
  • Zkontrolujte a zakažte všechny zbytečné procesy nebo služby spouštění. Spouštění systému bude rychlejší, pokud při spouštění spustíte méně procesů.
  • Zbavte se služeb založených na shellu, jako jsou iniciační skripty SysV, a nahraďte je soubory jednotek.
  • Vyhněte se používání závislostí Type=forking a řazení. Místo toho je nahraďte aktivací soketu a Type=simple, kdykoli je to možné. Umožní to lépe paralelní spuštění služeb.

Odstraňování problémů

Prozkoumejte neúspěšné služby

Pomocí následujícího příkazu vyhledejte služby systemd, které se nepodařilo spustit:

# systemctl --state=failed

Diagnostika služby

Další informace o odstraňování problémů se službou můžete také získat nastavením proměnné prostředí SYSTEMD_LOG_LEVEL na ladění.
Chcete-li například spustit démona systemd-networkd v režimu ladění, přidejte soubor drop-in pro službu a následující další konfigurace.

[Service]Environment=SYSTEMD_LOG_LEVEL=debug

Případně můžete nastavit proměnnou prostředí ručně pomocí následujícího příkazu:

# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd

Po dokončení nastavení restartujte službu a sledujte servisní deník pomocí volby -f/–follow pro zobrazení všech protokolů.

Systémové protokoly

Systémové protokoly ukládají historii systémových aktivit, jako je čas spouštění, spuštění služeb, systémové úlohy, služby na pozadí, neúspěšné aktivity a mnoho dalšího. Systemd vede „katalog“ chyb, zpráv, možných řešení a v protokolových zprávách zdůrazňuje kritické souvislosti, které by mohly zůstat nepovšimnuty. Logy systemd si můžete prohlédnout pomocí příkazu journalctl.

$ journalctl --pager-end

Příznak –pager-end zahájí kontrolu protokolu na konci výstupu journalctl.

Další zdroje

  1. Manuální stránka Systemd.unit.
  2. Průvodce systémy projektu Fedora.
  3. Popis systemd z Freedesktop.org.
  4. Systemd ArchWiki.

Koneckonců

systemd poskytuje robustní způsob správy spouštění Linuxu pomocí jednotek systemd. Článek zdůraznil různé způsoby použití příkazu systemctl k úpravě souborů jednotek a správě jednotek systemd. Zdůraznil, jak vytvořit novou připojovací jednotku systemd pro připojení nového souborového systému a umožnit jeho spuštění během spouštění. Nakonec jsem se podělil o několik tipů na optimalizaci systemd a o tom, jak řešit problémy se službami.


Linux
  1. Jak spravovat swapovací oddíl v Linuxu

  2. Jak zastavit službu systemd

  3. Jak odstranit systémové služby

  1. Jak spravovat možnosti souborů Linux

  2. Jak spravovat heslo účtu v Linuxu

  3. Jak povolit systemd na WSL2:Ubuntu 20 a CentOS 8

  1. Krátký úvod k jednotkám cest

  2. Jak používat příkaz Systemctl ke správě služeb Systemd

  3. Jak vytvořit službu Systemd v Linuxu