I když systemd řeší mnoho problémů se správou systému, někdy je to také matoucí.
Dokonce i jednoduchý úkol, jako je seznam služeb systemd, vás může přimět k zamyšlení.
V tomto článku vám ukážu, jak vypsat seznam služeb systemd. Vysvětlím také výstup, abyste snáze porozuměli různým stavům služeb.
Předpokládám, že máte nějaké znalosti o systemd, ale i když ne, mělo by to být v pořádku.
Jak vypsat seznam aktivních služeb v systemd
služby systemd jsou spravovány systemctl
příkaz. Pokud spustíte systemctl
bez jakýchkoli argumentů, vyvolá výchozí list-units
sub-command a uvádí různé typy systemd jednotek, jako jsou služby, zásuvky, cíle atd.
Ale vaším cílem je vypsat seznam služeb, abyste specifikovali typ jednotky pomocí --type
příznak takto:
systemctl --type=service
Všimli jste si, že jsem nespecifikoval list-units
dílčí příkaz, protože je výchozí? Pokud se chcete řídit konvencí, můžete to také určit. Dávám přednost tomuto způsobu a ve zbytku tutoriálu se budu řídit touto konvencí.
systemctl list-units --type=service
V obou případech bude výstup stejný. Ve výchozím nastavení tento příkaz zobrazuje pouze načtené a aktivní služby v abecedním pořadí:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
apparmor.service loaded active exited Load AppArmor profiles
apport.service loaded active exited LSB: automatic crash report generation
Dovolte mi vysvětlit výstup:
UNIT
:název systémové jednotky.LOAD
: zda byl konfigurační soubor jednotky analyzován systémem systemd.ACTIVE
:vysoký stav jednotky.SUB
:nízký stav jednotky. Aktivní jednotka může být v běžícím nebo opuštěném stavu. Tato hodnota závisí na typu služby.
Jak vidíte, můžete uvést seznam načtených služeb ve vašem systému Linux. Aktivní služba systemd však může být spuštěna nebo může být ukončena (po úspěšném spuštění).
Seznam všech spuštěných systemd služeb
Aktivní stav může mít také dílčí stav, jako je spuštěno, ukončeno atd. Můžete použít stejný --state
vlajka s podstátem.
Chcete-li zobrazit seznam spuštěných služeb systemd, použijte --state=running
příznak takto:
systemctl list-units --type=service --state=running
Zde je ukázkový výstup pro můj systém zobrazující některé ze spuštěných služeb systemd:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
bluetooth.service loaded active running Bluetooth service
bolt.service loaded active running Thunderbolt system service
Vypsat všechny načtené systémové služby včetně neaktivních
Ve výchozím nastavení příkaz systemctl zobrazuje pouze načtené a aktivní jednotky.
Pokud chcete vypsat všechny načtené služby včetně neaktivních, použijte --all
příznak:
systemctl list-units --all --type=service
Nyní můžete vidět i neaktivní služby:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apparmor.service loaded active exited Load AppArmor profiles
Vypsat všechny neaktivní služby systemd
Pokud chcete vidět pouze neaktivní služby, můžete kombinovat různé příznaky jako --all
a --state
takhle:
systemctl list-units --all --type=service --state=inactive
Jak můžete vidět na výstupu, zobrazuje všechny neaktivní služby systemd:
UNIT LOAD ACTIVE SUB DESCRIPTION
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apport-autoreport.service loaded inactive dead Process error reports when automatic reporting is enabled
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities
apt-daily.service loaded inactive dead Daily apt download activities
● auditd.service not-found inactive dead auditd.service
Vypsat všechny nainstalované systémové služby (i když nejsou načteny)
Každá jednotka systemd, ať už je to služba nebo zásuvka nebo jakákoli jiná jednotka, má soubor jednotky, který
systemctl list-unit-files --type=service
Zde je to, co byste měli vidět:
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
acpid.service disabled enabled
alsa-restore.service static enabled
alsa-state.service static enabled
alsa-utils.service masked enabled
anacron.service enabled enabled
apparmor.service enabled enabled
apport-autoreport.service static enabled
[email protected] static enabled
Vysvětlování jednotlivých typů stavu bude příliš zdlouhavé a nespadá do rozsahu tohoto článku. Možná o tom v budoucnu napíšu.
Vypsat všechny systémové služby, které budou automaticky spuštěny při každém spuštění
Chcete-li zobrazit všechny služby systemd, které se automaticky spustí při každém spuštění systému, použijte tento příkaz:
systemctl list-unit-files --type=service --state=enabled
Jste zmateni stavem povoleno? To je normální. Mnoho nových uživatelů si plete povolenou systémovou službu s běžící službou.
Povolená služba systemd však znamená, že služba bude aktivována automaticky při spuštění systému.
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
anacron.service enabled enabled
apparmor.service enabled enabled
[email protected] enabled enabled
avahi-daemon.service enabled enabled
binfmt-support.service enabled enabled
bluetooth.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
dbus-fi.w1.wpa_supplicant1.service enabled enabled
Všimli jste si předvolby dodavatele? Byl také přítomen v předchozím příkladu.
Předvolba dodavatele definuje automatické chování systémové jednotky při instalaci programu.
Předpokládejme, že jste nainstalovali nový program XYZ. Tento XYZ má službu systemd s názvem xyz.service s povolenou předvolbou dodavatele. To znamená, že po instalaci programu, když nabootujete systém, se tato xyz.service automaticky aktivuje při bootování.
Pokud je předvolba dodavatele zakázána, budete ji muset aktivovat ručně. Jakmile je povoleno, spustí se automaticky při každém spuštění.
sudo systemd enable xyz.service
Zobrazení stavu konkrétní systémové služby
Dosud jste viděli různé způsoby výpisu služeb. Nic se ale nezaměřuje na jedinou službu.
Podrobné informace o službě systemd můžete získat pomocí status
dílčí příkaz systemctl. Pomocí tohoto příkazu funguje dokončování karet.
systemctl status <service_name>
Zde je příklad se službou správce sítě:
[email protected]:~$ systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
Docs: man:NetworkManager(8)
Main PID: 711 (NetworkManager)
Tasks: 3 (limit: 9157)
Memory: 13.6M
CGroup: /system.slice/NetworkManager.service
└─711 /usr/sbin/NetworkManager --no-daemon
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info> [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info> [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info> [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info> [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL
Můžete vidět, že poskytuje spoustu užitečných informací, jako je stav služby, manuálová stránka služby, paměť, kterou spotřebovává, id procesu atd. Také zobrazuje několik posledních žurnálovaných protokolů pro službu.
Pokud chcete v shell skriptu zkontrolovat, zda je služba aktivní nebo ne, můžete použít is-active
dílčí příkaz. Výstup je 0 pro aktivní.
systemctl is-active application.service
Podobně, pokud chcete zkontrolovat, zda je služba povolena (nastaveno na automatické spouštění při spouštění), můžete použít is-enabled
dílčí příkaz. Výstup je 0 pro povolenou službu.
systemctl is-enabled application.service
Závěr
Myslím, že nyní lépe rozumíte výpisu systemd služeb. Doufám, že jste se dozvěděli pár nových věcí o příkazech systemd a systemctl.
Neváhejte a poskytněte svůj názor, dotazy nebo návrhy v sekci komentářů.