Sebbene systemd risolva molti problemi con la gestione del sistema, a volte crea anche confusione.
Anche un semplice compito come elencare i servizi di sistema potrebbe farti pensare.
In questo articolo, ti mostrerò come elencare i servizi systemd. Spiegherò anche l'output in modo che sia più facile comprendere i diversi stati dei servizi.
Presumo che tu abbia una certa conoscenza di systemd ma anche se non lo fai, dovrebbe andare bene.
Come elencare i servizi attivi in systemd
i servizi systemd sono gestiti da systemctl
comando. Se esegui systemctl
senza alcun argomento, invoca il valore predefinito list-units
sottocomando ed elenca vari tipi di unità di sistema come servizi, socket, destinazioni ecc.
Ma il tuo scopo è elencare i servizi in modo da specificare il tipo di unità con --type
segnala in questo modo:
systemctl --type=service
Hai notato che non ho specificato le list-units
sottocomando perché è l'impostazione predefinita? Se vuoi seguire la convenzione, puoi specificare anche quello. Preferisco così e seguirò questa convenzione nel resto del tutorial.
systemctl list-units --type=service
In entrambi i casi l'output sarà lo stesso. Per impostazione predefinita, questo comando mostra solo i servizi caricati e attivi in ordine alfabetico:
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
Lascia che ti spieghi l'output:
UNIT
:nome dell'unità systemd.LOAD
: se il file di configurazione dell'unità è stato analizzato da systemd.ACTIVE
:stato di alto livello dell'unità.SUB
:stato di basso livello dell'unità. Un'unità attiva può essere in stato di funzionamento o uscita. Questo valore dipende dal tipo di servizio.
Come puoi vedere, puoi elencare i servizi caricati sul tuo sistema Linux. Ma un servizio systemd attivo potrebbe essere in esecuzione o potrebbe essere chiuso (dopo essere stato eseguito correttamente).
Elenca tutti i servizi systemd in esecuzione
Lo stato attivo può anche avere uno stato secondario come running, exited ecc. Puoi usare lo stesso --state
bandiera con il sottostato.
Per elencare i servizi systemd in esecuzione, usa --state=running
segnala in questo modo:
systemctl list-units --type=service --state=running
Ecco un esempio di output per il mio sistema che mostra alcuni dei servizi systemd in esecuzione:
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
Elenca tutti i servizi systemd caricati inclusi quelli inattivi
Per impostazione predefinita, il comando systemctl mostra solo le unità caricate e attive.
Se vuoi elencare tutti i servizi caricati compresi quelli inattivi, usa il --all
bandiera:
systemctl list-units --all --type=service
Ora puoi vedere anche i servizi inattivi:
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
Elenca tutti i servizi systemd inattivi
Se vuoi vedere solo i servizi inattivi, puoi combinare vari flag come --all
e --state
così:
systemctl list-units --all --type=service --state=inactive
Come puoi vedere nell'output, mostra tutti i servizi di sistema inattivi:
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
Elenca tutti i servizi systemd installati (anche se non sono stati caricati)
Ogni unità systemd, sia essa di servizio o socket o qualsiasi altra unità, ha un file di unità che
systemctl list-unit-files --type=service
Ecco cosa dovresti vedere:
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
Spiegare ogni tipo di stato sarà troppo lungo e non rientra nell'ambito di questo articolo. Forse ne scriverò in futuro.
Elenca tutti i servizi systemd che verranno eseguiti automaticamente ad ogni avvio
Per vedere tutti i servizi di systemd che verranno eseguiti automaticamente ogni volta che il tuo sistema si avvia, usa questo comando:
systemctl list-unit-files --type=service --state=enabled
Sei confuso con lo stato abilitato? È normale. Molti nuovi utenti confondono un servizio di sistema abilitato con un servizio in esecuzione.
Tuttavia, un servizio systemd abilitato significa che il servizio verrà attivato automaticamente all'avvio del sistema.
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
Noti il Vendor Preset? Era presente anche nell'esempio precedente.
Il preset del fornitore definisce il comportamento automatico dell'unità systemd quando viene installato un programma.
Supponiamo di aver installato un nuovo programma XYZ. Questo XYZ ha un servizio systemd chiamato xyz.service con la preimpostazione del fornitore abilitata. Ciò significa che dopo l'installazione del programma, all'avvio del sistema, questo xyz.service verrà attivato automaticamente all'avvio.
Se la preimpostazione del fornitore è disabilitata, dovrai impostarla manualmente per attivarla. Una volta abilitato, si avvia automaticamente ad ogni avvio.
sudo systemd enable xyz.service
Visualizza lo stato di un particolare servizio systemd
Finora, hai visto vari modi per elencare i servizi. Ma niente si concentra su un unico servizio.
Puoi ottenere informazioni dettagliate su un servizio systemd utilizzando lo status
sottocomando di systemctl. Il completamento delle schede funziona con questo comando.
systemctl status <service_name>
Ecco un esempio con il servizio di gestione della rete:
[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
Puoi vedere che fornisce molte informazioni utili come lo stato del servizio, la pagina man del servizio, la memoria che consuma, l'id del processo ecc. Mostra anche gli ultimi registri journald per il servizio.
Se vuoi controllare se un servizio è attivo o meno in uno script di shell, puoi usare is-active
sottocomando. L'uscita è 0 per attivo.
systemctl is-active application.service
Allo stesso modo, se vuoi verificare se un servizio è abilitato (impostato per l'avvio automatico all'avvio), puoi utilizzare is-enabled
sottocomando. L'output è 0 per il servizio abilitato.
systemctl is-enabled application.service
Conclusione
Penso che ora tu abbia una migliore comprensione dell'elenco dei servizi di systemd. Spero che tu abbia imparato alcune cose nuove sul comando systemd e systemctl.
Non esitare a fornire feedback, domande o suggerimenti nella sezione commenti.