Le gestionnaire de systèmes et de services par défaut de la plupart des distributions Linux est désormais systemd
.
Le processus systemd
remplace l’init SysV
. Il s’exécute en tant que premier processus après le démarrage du noyau et est chargé d’amener l’hôte Linux à l’état où il peut être utilisé. Il est responsable du démarrage et de la gestion des services, du montage des systèmes de fichiers, de la gestion du matériel, de la génération de l’invite de connexion et de bien d’autres choses encore.
L’un des principaux avantages par rapport à SysV est que systemd démarre autant de services que possible en parallèle, ce qui accélère le processus de démarrage et fait apparaître l’écran de connexion plus rapidement.
Unités
Les éléments gérés par systemd sont appelés unités. Les fichiers d’unités sont situés dans /lib/systemd/system.
Unités de service
Pour la gestion des services, les unités cibles sont les unités de service, dont les fichiers d’unité ont un suffixe .service.
Gestion des services systemd
La commande permettant de gérer les unités systemd est systemctl
.
Démarrage et arrêt des services
Pour démarrer un service systemd, utilisez la commande systemctl start :
sudo systemctl start nom.service
Vous pouvez laisser le suffixe .service. Par exemple, pour démarrer le serveur apache sur Ubuntu :
$ sudo systemctl start apache2
Pour arrêter un service en cours d’exécution :
$ sudo systemctl stop nom.service
Ainsi, pour arrêter le serveur apache sous Ubuntu :
$ sudo systemctl stop apache2
Redémarrage et rechargement des services
Pour redémarrer un service en cours d’exécution, utilisez la commande restart :
$ sudo systemctl restart nom.service
Et lorsque le seul rechargement du fichier de configuration est nécessaire
$ sudo systemctl reload nom.service
Activation et désactivation des services
Si vous souhaitez qu’un service démarre automatiquement au démarrage du système, utilisez la commande enable :
sudo systemctl enable nom.service
Pour empêcher un service de démarrer au démarrage du système, utilisez la commande enable : $ sudo systemctl enable name.service
$ sudo systemctl disable name.service
La désactivation n’arrête pas un service en cours d’exécution.
Affichage de l’état d’un service
Pour afficher des informations sur un service :
sudo systemctl status nom.service
Cela vous montrera l’état du service et les premières lignes du fichier journal. Ainsi, lorsque le service est en cours d’exécution, la sortie de
sudo systemctl status apache2
est
apache2.service - Le serveur HTTP Apache
Chargé : chargé (/lib/systemd/system/apache2.service ; enabled ; vendor preset : enabled)
Drop-In : /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active : active (running) since Tue 2020-05-19 22:11:36 UTC ; 4 days ago
Process : 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
PID principal : 104165 (apache2)
Tâches : 55 (limite : 1024)
CGroup : /system.slice/apache2.service
├─104165 /usr/sbin/apache2 -k start
├─116006 /usr/sbin/apache2 -k start
└─116007 /usr/sbin/apache2 -k start
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Démarrage du serveur HTTP Apache...
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Démarrage du serveur HTTP Apache.
21 mai 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.
May 22 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.
Pour vérifier si un service est actif :
sudo systemctl is-active nom.service
Ainsi, lorsque le service apache2 est en cours d’exécution, la sortie de la commande systemctl is-active est la suivante :
$ sudo systemctl is-active apache2
actif
Pour vérifier si un service est activé :
$ sudo systemctl is-enabled nom.service.
Visualisation de l’état du système
Toutes les commandes que vous avez vues jusqu’à présent sont utilisées pour gérer un seul service. Lorsque vous souhaitez avoir une vue d’ensemble de l’état du système, utilisez les commandes suivantes :
Pour voir tous les types d’unités
sudo systemctl -t help
Types d'unités disponibles :
service
socket
cible
périphérique
montage
automount
swap
minuterie
chemin
tranche
scope
Pour obtenir la liste de toutes les unités installées, utilisez list-unit-files
sudo systemctl list-unit-files
ÉTAT DU FICHIER DE L'UNITÉ
proc-sys-fs-binfmt_misc.automount statique
-.mount généré
boot-efi.mount généré
dev-hugepages.mount statique
dev-mqueue.mount statique
mnt.mount généré
proc-sys-fs-binfmt_misc.mount statique
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
acpid.path activé
apport-autoreport.path activé
systemd-ask-password-console.path statique
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-161.scope transient
accounts-daemon.service activé
La sortie ne comporte que deux colonnes : Unit File (fichier d’unité) et State (état). L’état est généralement activé, désactivé, statique ou masqué.
- Statique: Cela signifie que l’unité ne peut pas être activée, qu’elle effectue une action unique ou qu’elle dépend d’une autre unité et ne peut pas être exécutée seule.
- Masquée : Une unité répertoriée comme masquée signifie qu’elle ne peut pas être démarrée, car elle est liée à /dev/null. C’est ce qu’on appelle masquer l’unité. Cela empêche le service d’être démarré, manuellement ou automatiquement.
Liste de tous les services installés
La commande systemctl list-unit-files avec le filtre -t ou -type service affiche uniquement l’état des services installés.
sudo systemctl list-unit-files -t service
ÉTAT DU FICHIER D'UNITÉ
accounts-daemon.service enabled
acpid.service désactivé
apache-htcacheclean.service désactivé
apache-htcacheclean@.service désactivé
apache2.service enabled
apache2@.service désactivé
apparmor.service activé
apport-autoreport.service static
apport-forward@.service static
apport.service généré
apt-daily-upgrade.service static
apt-daily.service static
atd.service activé
autovt@.service activé
blk-availability.service activé
bootlogd.service masqué
bootlogs.service masqué
Pour voir toutes les unités de service actives, utilisez list-units avec le filtre -t service
sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service chargé actif en cours d'exécution Service des comptes
apache2.service loaded active running Le serveur HTTP Apache
apparmor.service chargé actif exité Initialisation d'AppArmor
apport.service chargé actif exité LSB : génération automatique de rapports de crash
atd.service chargé activement en cours d'exécution Ordonnanceur d'exécution différée
blk-availability.service loaded active exited Disponibilité des périphériques de bloc
cloud-config.service loaded active exited Appliquer les paramètres spécifiés dans cloud-con
cloud-final.service loaded active exited Exécution des scripts utilisateur/final du nuage
cloud-init-local.service loaded active exited Travail initial de cloud-init (avant la mise en réseau)
cloud-init.service loaded active exited Tâche initiale de cloud-init (service de métadonnées)
console-setup.service chargé actif quitté Définir la police et le clavier de la console
cron.service loaded active running Programme d'arrière-plan régulier traitant les données
La sortie comporte les colonnes suivantes :
- UNIT: Le nom de l’unité de service systemd
- LOAD: Indique si la définition de l’unité a été correctement lue et chargée
- ACTIVE: Indique si l’unité est active.
- SUB: état d’activation de bas niveau de l’unité, donnant des informations plus détaillées sur l’unité. Cet état varie selon le type d’unité.
- DESCRIPTION: Description de l’unité de service.
Conclusion
J’espère que cela vous a donné une idée de l’utilisation de systemctl pour gérer les services sous Linux. Si vous souhaitez en savoir plus, vous pouvez consulter ce cours Linux Mastery.