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
- Manuální stránka Systemd.unit.
- Průvodce systémy projektu Fedora.
- Popis systemd z Freedesktop.org.
- 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.