Le gestionnaire de systèmes et de services par défaut de la plupart des distributions Linux est désormais systemd
Le processus systemd
remplacez 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
Gérer les 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 sur 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 - The Apache HTTP Server
Loaded : loaded (/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)
Main PID : 104165 (apache2)
Tasks : 55 (limit : 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>: A démarré le 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 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1</x></x></x></x>] : Recharge le 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
active
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
target
device
mount
automount
swap
timer
path
slice
scope
Pour lister toutes les unités installées, utilisez list-unit-files
sudo systemctl list-unit-files
UNITÉ FICHIER ETAT
proc-sys-fs-binfmt_misc.automount static
-.mount generated
boot-efi.mount generated
dev-hugepages.mount static
dev-mqueue.mount static
mnt.mount generated
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug
.mount static
acpid.path enabled
apport-autoreport.path enabled
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-161.scope transient
accounts-daemon.service enabled
La sortie ne comporte que deux colonnes : Unit File et State. 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 qu'elle 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
UNIT FILE STATE
accounts-daemon.service enabled
acpid.service disabled
apache-htcacheclean.service disabled
apache-htcacheclean@.service disabled
apache2.service enabled
apache2@.service disabled
apparmor.service enabled
apport-autoreport.service static
apport-forward@.service statique
apport.service généré
apt-daily-upgrade
.service statique
apt-quotidien
.service statique
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 loaded active running Accounts Service
apache2.service loaded active running The Apache HTTP Server
apparmor.service loaded active exited AppArmor initialization
apport.service loaded active exited LSB : automatic crash report generation
atd.service loaded active running Deferred execution scheduler
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écuter les scripts utilisateur/final du nuage
cloud-init-local.service loaded active exited Initial cloud-init job (pre-networking)
cloud-init.service loaded active exited Initial cloud-init job (metadata service
console-setup.service loaded active exited Set console font and keymap
cron.service loaded active running Regular background program processing dae
La sortie comporte les colonnes suivantes
- UNITÉ: Le nom de l'unité de service systemd
- CHARGER: Indique si la définition de l'unité a été correctement lue et chargée
- ACTIF: 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.