Bien que systemd résolve de nombreux problèmes de gestion du système, il est parfois déroutant.
Même une tâche simple comme répertorier les services systemd peut vous faire réfléchir.
Dans cet article, je vais vous montrer comment répertorier les services systemd. J'expliquerai également la sortie afin qu'il vous soit plus facile de comprendre les différents états des services.
Je suppose que vous avez une certaine connaissance de systemd mais même si ce n'est pas le cas, ça devrait aller.
Comment répertorier les services actifs dans systemd
les services systemd sont gérés par le systemctl
commande. Si vous exécutez systemctl
sans aucun argument, il invoque la valeur par défaut list-units
sous-commande et il répertorie différents types d'unités systemd comme les services, les sockets, les cibles, etc.
Mais votre but est de lister les services donc vous spécifiez le type d'unité avec --type
signaler comme ceci :
systemctl --type=service
Avez-vous remarqué que je n'ai pas spécifié les list-units
sous-commande car c'est la valeur par défaut ? Si vous souhaitez suivre la convention, vous pouvez également le spécifier. Je le préfère ainsi et je suivrai cette convention dans le reste du tutoriel.
systemctl list-units --type=service
Dans les deux cas, la sortie sera la même. Par défaut, cette commande affiche uniquement les services chargés et actifs par ordre alphabétique :
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
Laissez-moi vous expliquer le résultat :
UNIT
:nom de l'unité systemd.LOAD
: si le fichier de configuration de l'unité a été analysé par systemd.ACTIVE
:état haut niveau de l'unité.SUB
:état de niveau bas de l'unité. Une unité active peut être à l'état de fonctionnement ou à l'état de sortie. Cette valeur dépend du type de service.
Comme vous pouvez le voir, vous pouvez répertorier les services chargés sur votre système Linux. Mais un service systemd actif peut être en cours d'exécution ou peut être fermé (après avoir été exécuté avec succès).
Répertorier tous les services systemd en cours d'exécution
L'état actif peut également avoir un sous-état comme en cours d'exécution, quitté, etc. Vous pouvez utiliser le même --state
drapeau avec le sous-état.
Pour répertorier les services systemd en cours d'exécution, utilisez le --state=running
signaler comme ceci :
systemctl list-units --type=service --state=running
Voici un exemple de sortie pour mon système montrant certains des services systemd en cours d'exécution :
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
Répertorier tous les services systemd chargés, y compris ceux qui sont inactifs
Par défaut, la commande systemctl n'affiche que les unités chargées et actives.
Si vous voulez lister tous les services chargés y compris les inactifs, utilisez le --all
drapeau :
systemctl list-units --all --type=service
Vous pouvez désormais voir même les services inactifs :
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
Lister tous les services systemd inactifs
Si vous voulez voir uniquement les services inactifs, vous pouvez combiner différents drapeaux comme --all
et --state
comme ceci :
systemctl list-units --all --type=service --state=inactive
Comme vous pouvez le voir dans la sortie, il affiche tous les services systemd inactifs :
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
Lister tous les services systemd installés (même s'ils ne sont pas chargés)
Chaque unité systemd, qu'il s'agisse d'un service, d'un socket ou de toute autre unité, possède un fichier d'unité qui
systemctl list-unit-files --type=service
Voici ce que vous devriez voir :
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
Expliquer chaque type d'état sera trop long et n'entre pas dans le cadre de cet article. Peut-être que j'écrirai à ce sujet à l'avenir.
Répertorier tous les services systemd qui seront exécutés automatiquement à chaque démarrage
Pour voir tous les services systemd qui s'exécuteront automatiquement à chaque démarrage de votre système, utilisez cette commande :
systemctl list-unit-files --type=service --state=enabled
Êtes-vous confus avec l'état activé ? C'est normal. De nombreux nouveaux utilisateurs confondent un service système activé avec un service en cours d'exécution.
Cependant, un service systemd activé signifie que le service sera activé automatiquement au démarrage du système.
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
Avez-vous remarqué le préréglage du vendeur ? Il était également présent dans l'exemple précédent.
Le préréglage du fournisseur définit le comportement automatique de l'unité systemd lorsqu'un programme est installé.
Supposons que vous ayez installé un nouveau programme XYZ. Ce XYZ a un service systemd appelé xyz.service avec le préréglage du fournisseur activé. Cela signifie qu'après l'installation du programme, lorsque vous démarrez le système, ce xyz.service sera activé automatiquement au démarrage.
Si le préréglage du fournisseur est désactivé, vous devrez le définir manuellement pour l'activer. Une fois activé, il démarre automatiquement à chaque démarrage.
sudo systemd enable xyz.service
Afficher l'état d'un service systemd particulier
Jusqu'à présent, vous avez vu différentes manières de répertorier les services. Mais rien ne se concentre sur un seul service.
Vous pouvez obtenir des informations détaillées sur un service systemd en utilisant le status
sous-commande de systemctl. La complétion par tabulation fonctionne avec cette commande.
systemctl status <service_name>
Voici un exemple avec le service de gestionnaire de réseau :
[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
Vous pouvez voir qu'il fournit de nombreuses informations utiles telles que l'état du service, la page de manuel du service, la mémoire qu'il consomme, l'identifiant du processus, etc. Il affiche également les derniers journaux journalisés du service.
Si vous voulez vérifier si un service est actif ou non dans un script shell, vous pouvez utiliser le is-active
sous-commande. La sortie est 0 pour actif.
systemctl is-active application.service
De même, si vous souhaitez vérifier si un service est activé (configuré pour démarrer automatiquement au démarrage), vous pouvez utiliser is-enabled
sous-commande. La sortie est 0 pour le service activé.
systemctl is-enabled application.service
Conclusion
Je pense que vous avez maintenant une meilleure compréhension de la liste des services systemd. J'espère que vous avez appris quelques nouvelles choses sur les commandes systemd et systemctl.
N'hésitez pas à nous faire part de vos commentaires, questions ou suggestions dans la section des commentaires.