-
-
-
-
-
- Tools
- Dev
- Bash
- Recherche web
-
systemctl (manpage) – Contrôle le système systemd et le gestionnaire de services.
Ne pas confondre avec sysctl (manpage) – Configureur du noyau Linux.
systemd est un processus d'init controversé qui a été imposé sous de nombreuses distributions GNU/Linux ayant rompu avec la philosophie UNIX (1 programme fait 1 seule chose en optimisant vers la simplicité). L'imposition dans Debian de l'usine à gaz systemd à la place de SysV init et des autres alternatives d'init a conduit à la création de la distribution Devuan et de ses dérivées sans systemd. Mais on n'a pas toujours la chance de travailler sous Devuan. Voici donc une carte de référence rapide de systemctl.
Principe général de systemd : Le fichier d'init SysV /etc/inittab
est remplacé par le répertoire /etc/systemd/system/
qui contient des liens symboliques vers des fichiers se trouvant dans /lib/systemd/system/
.
En outre, systemd prévoit une configuration complémentaire optionnelle par utilisateur (cf. wiki archlinux) chargée depuis des répertoires listés ci-dessous par ordre de priorité :
/usr/lib/systemd/user/
: où résident les unités fournies par les paquets installés~/.local/share/systemd/user/
: où résident les unités fournies par les paquets installés dans le répertoire home/etc/systemd/user/
: où résident les unités système placées par l'administrateur système~/.config/systemd/user/
: où résident les unités placées par l'utilisateur lui-même
Les 4 types d'unités (fichiers stockés dans /lib/systemd/
) :
systemctl list-unit-files
Chemin vers le fichier : find /lib/systemd/ -name {NOM}
systemctl list-units
systemctl list-units --type=service
systemctl list-unit-files
systemctl list-unit-files --type=service
systemctl status [NOM]
(Codes d'état "running", "degraded", "maintenance"… : Voir ci-dessous Diagnostic avec systemctl : systemctl is-system-running
)
Exemples :
systemctl status
systemctl status sshd.service
systemctl list-dependencies {NOM}
IMPORTANT :
/etc/systemd/system/…
vers /lib/systemd/system/…
/etc/systemd/system/…
afin qu'il ne soit pas exécuté au prochain boot/etc/systemd/system/…
vers /dev/null
ce qui inhibe tout démarrage manuel ou par dépendance de l'unité/etc/systemd/system/…
afin qu'il puisse être démarré manuellement ou par dépendanceAttention : systemd peut masquer un service qui n'existe pas (encore) :
root@debian9:~# systemctl mask test.service Unit test.service does not exist, proceeding anyway. Created symlink /etc/systemd/system/test.service --> /dev/null. root@debian9:~# echo $? 0 root@debian9:~# systemctl status test.service ● test.service Loaded: masked (/dev/null; bad) Active: inactive (dead) root@debian9:~# systemctl unmask test.service Removed /etc/systemd/system/test.service. root@debian9:~# stat /etc/systemd/system/test.service stat: impossible d'évaluer '/etc/systemd/system/test.service': Aucun fichier ou dossier de ce type
systemctl {start|stop} {NOM_OU_CHEMIN}
systemctl {enable|disable} {NOM_OU_CHEMIN}
systemctl {mask|unmask} {NOM_OU_CHEMIN}
systemctl {start|stop} {NOM}.service
systemctl {enable|disable} {NOM}.service
systemctl {mask|unmask} {NOM}.service
Exemples de services :
systemctl reload {NOM}.service
systemctl daemon-reload {NOM}.service
Pour gérer un service fourni au niveau utilisateur, il faut ajouter l'option --user.
Pour désactiver par exemple le service dropbox :
systemctl --user disable dropbox
Un script /etc/rc.local
n'a aucun sens pour systemd1).
La méthode correcte consiste à créer un nouveau service qui sera exécuté en mode multi-utilisateurs.
Exemple d'un nouveau fichier de configuration /etc/systemd/system/my-startup.service
demandant l'exécution du script /usr/local/libexec/my-startup-script
:
# /etc/systemd/system/my-startup.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/libexec/my-startup-script [Install] WantedBy=multi-user.target
Puis activation de ce nouveau service2) :
systemctl enable my-startup.service
Notes complémentaires de "What is the correct substitute for rc.local in systemd instead of re-creating rc.local" :
Wants=network-online.target
and After=network-online.target
DefaultDependencies=no
systemctl list-dependencies --after basic.target
. (Note that's --after, not --before)Pour systemd, les runlevels n'ont pas de sens. Il faut penser cibles3) (targets).
systemctl poweroff
(Équivalent de : systemctl start poweroff.target --job-mode=replace-irreversibly
)
systemctl --force poweroff
Arrêt brutal : systemctl --force --force poweroff
systemctl halt
(Équivalent de : systemctl start halt.target --job-mode=replace-irreversibly
)
systemctl --force halt
Arrêt brutal : systemctl --force --force halt
systemctl reboot
(Équivalent de : systemctl start reboot.target --job-mode=replace-irreversibly
)
Redémarrage brutal : systemctl --force --force reboot
Pour certains BIOS (U)EFI, redémarrer dans le setup : systemctl --firmware-setup reboot
systemctl kexec
(Équivalent de : systemctl start kexec.target --job-mode=replace-irreversibly
)
systemctl --force kexec
Redémarrage brutal : systemctl --force --force kexec
systemctl isolate N
systemctl start isolate.target N
Note : "isolate" est valide seulement pour les commandes start et provoque l'arrêt de toutes les autres unités lorsque l'unité spécifique est démarrée.
systemctl isolate default.target
root@debian10:~# find /lib/systemd/ -name '*.target' /lib/systemd/user/shutdown.target /lib/systemd/user/exit.target /lib/systemd/user/default.target /lib/systemd/system/halt.target /lib/systemd/system/poweroff.target /lib/systemd/system/shutdown.target /lib/systemd/system/suspend-then-hibernate.target /lib/systemd/system/default.target ...
Examen du fichier de configuration cible default.target qui ne fait que requérir d'autre fichiers cibles en tant que dépendances :
root@debian10:~# cat /lib/systemd/system/default.target # SPDX-License-Identifier: LGPL-2.1+ # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Unit] Description=Graphical Interface Documentation=man:systemd.special(7) Requires=multi-user.target Wants=display-manager.service Conflicts=rescue.service rescue.target After=multi-user.target rescue.service rescue.target display-manager.service AllowIsolate=yes
TODO…
1. Connaître l'état global du système :
systemctl is-system-running
Renvoie l'un des mots suivants (exit code) :
2. Afficher brièvement les services en échec de démarrage :
systemctl --failed
2. Ou bien afficher les service en échec en rouge parmi les autres
systemctl --fail
2. Ou bien afficher les services démarrés en ordre inverse, échecs en rouge, non trouvés en jaune :
systemctl -r -p err
3. Afficher les dépendances d'une unité problématique et leurs états respectifs :
systemctl list-dependencies [NAME]
4. Entrer dans l'état systemd par défaut après correction d'un problème au démarrage :
systemctl isolate default.target
man systemctl
La commande systemd-delta
trouve dans le répertoire /etc/systemd/
des fichiers de configuration surchargés par rapport au sous-répertoire correspondant par défaut dans /usr/lib/systemd/
.
Cf. doc FR de Red Hat Enterprise Linux : Surveiller les unités remplacées (archive.org)
Exemple :
root@debian9:~# systemd-delta [EXTENDED] /lib/systemd/system/systemd-resolved.service → /lib/systemd/system/systemd-resolved.service.d/resolvconf.conf [MASKED] /etc/systemd/system/samba-ad-dc.service → /lib/systemd/system/samba-ad-dc.service [EXTENDED] /lib/systemd/system/systemd-timesyncd.service → /lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf [MASKED] /etc/systemd/system/systemd-fsck-root.service → /lib/systemd/system/systemd-fsck-root.service [EXTENDED] /lib/systemd/system/rc-local.service → /lib/systemd/system/rc-local.service.d/debian.conf 5 overridden configuration files found.
Types de différence systemd-delta :
systemd-analyze
Exemple :
root@debian10:~# systemd-analyze Startup finished in 3.518s (kernel) + 37.633s (userspace) = 41.151s graphical.target reached after 37.612s in userspace
systemd-analyze blame
Exemple :
root@debian10:~# systemd-analyze blame 24.292s plymouth-quit-wait.service 6.302s ModemManager.service ... 14ms systemd-update-utmp-runlevel.service 12ms sys-fs-fuse-connections.mount 10ms user-runtime-dir@1000.service
systemd-analyze critical-chain
Exemple :
root@debian10:~# systemd-analyze critical-chain The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. graphical.target @37.612s └─multi-user.target @37.612s └─vboxadd-service.service @37.252s +354ms └─vboxadd.service @9.348s +27.901s └─basic.target @9.272s └─paths.target @9.271s └─systemd-ask-password-wall.path @3.027s └─-.mount @2.839s └─systemd-journald.socket @2.880s └─system.slice @2.839s └─-.slice @2.839s
/usr/local/libexec/my-startup-script
doit bien sûr être exécutable).
Commentaires