Introduction
Ce tutoriel vous guidera tout au long du processus d'utilisation de la commande systemctl daemon-reload pour gérer les démons et les services système sur votre système Linux. Systemd est le gestionnaire de services par défaut pour la plupart des distributions Linux modernes, et comprendre comment mettre à jour correctement les configurations des services est une compétence essentielle pour les utilisateurs et les administrateurs Linux.
Dans ce laboratoire (Lab), vous apprendrez quand et pourquoi utiliser la commande systemctl daemon-reload, créer et modifier des fichiers de service, et appliquer les modifications de configuration sans perturber le fonctionnement de votre système. À la fin de ce tutoriel, vous serez à l'aise avec les services systemd et saurez appliquer efficacement les modifications de configuration.
Ce LabEx nécessite une connexion Internet pour l'apprentissage, seuls les utilisateurs LabEx Pro peuvent démarrer la machine virtuelle (VM). Passez à l'offre Pro.
Comprendre les bases de systemd et systemctl
Systemd est le gestionnaire de services et de système pour la plupart des distributions Linux modernes, y compris Ubuntu 22.04 que nous utilisons dans ce laboratoire. Il est responsable du lancement et de la gestion des services système, et systemctl est l'outil de ligne de commande principal utilisé pour interagir avec systemd.
Qu'est-ce qu'un démon du système?
Un démon est un processus d'arrière-plan qui s'exécute en continu sur votre système Linux. Ces processus effectuent diverses tâches telles que le serveur de pages web (Apache, Nginx), la gestion de bases de données (MySQL, PostgreSQL) ou la gestion d'événements système. Systemd gère ces démon à travers des fichiers de configuration standardisés appelés "fichiers d'unité".
Commandes de base de systemctl
Commençons par explorer quelques commandes de base de systemctl pour comprendre l'état actuel de votre système :
Ouvrez un terminal en cliquant sur l'icône Terminal.
Liste tous les services système actifs avec la commande suivante :
systemctl list-units --type=service

Cette commande affiche tous les services actuellement actifs sur votre système. Vous devriez voir une sortie similaire à :
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service chargé actif exécutant Service de comptes
apparmor.service chargé actif terminé Initialisation d'AppArmor
avahi-daemon.service chargé actif exécutant Empilement mDNS/DNS-SD Avahi
...
Appuyez sur Ctrl+C ou Q pour quitter la commande.
- Vérifiez l'état d'un service spécifique, par exemple le service SSH :
systemctl status ssh

Vous devriez voir des informations détaillées sur le service SSH, y compris s'il est actif, son identifiant de processus et les entrées de journal récentes :
● ssh.service - Serveur de shell sécurisé OpenBSD
Chargé : chargé (/lib/systemd/system/ssh.service ; activé ; paramètre fourni par le fabricant : activé)
Actif : actif (en cours d'exécution) depuis mar. 2023-06-13 12:34:56 UTC ; il y a 3h 25min
Docs: man:sshd(8)
man:sshd_config(5)
Processus: 1234 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
PID principal: 1235 (sshd)
Tâches: 1 (limite : 4915)
Mémoire : 5,6M
CPU : 236ms
Groupe de contrôle: /system.slice/ssh.service
└─1235 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
- Examnons où sont stockés les fichiers de service systemd. Ce sont les fichiers avec lesquels nous allons travailler dans les étapes suivantes :
ls -l /etc/systemd/system/
Ce répertoire contient les fichiers d'unité de service qui définissent la manière dont systemd gère les services. Vous devriez voir plusieurs fichiers .service et des liens symboliques.
- Les fichiers d'unité fournis par le système sont situés dans un répertoire différent. Examnons-les :
ls -l /lib/systemd/system/
Ce répertoire contient les fichiers d'unité de service par défaut fournis avec votre système.
Maintenant que vous comprenez les bases de systemd et la manière de vérifier l'état des services, vous êtes prêt à créer et modifier les fichiers de service dans l'étape suivante.
Création d'un fichier de service systemd simple
Dans cette étape, vous allez créer un fichier de service systemd simple qui exécutera un script personnalisé. Cela vous aidera à comprendre comment fonctionnent les fichiers de service et comment les modifier.
Création d'un script simple
Tout d'abord, créons un script simple que notre service exécutera :
- Créez un répertoire pour votre script :
mkdir -p ~/project/scripts
- Utilisez l'éditeur de texte
nanopour créer un script simple :
nano ~/project/scripts/hello-service.sh
- Ajoutez le contenu suivant au script :
#!/bin/bash
while true; do
echo "Hello from custom service: $(date)" >> /tmp/hello-service.log
sleep 10
done
Appuyez sur Ctrl+X pour quitter l'éditeur, puis Y pour enregistrer le fichier, puis Entrée pour confirmer le nom du fichier.
Ce script écrit simplement un message avec la date actuelle dans un fichier de journal toutes les 10 secondes.
- Rendez le script exécutable :
chmod +x ~/project/scripts/hello-service.sh
Création d'un fichier d'unité de service systemd
Maintenant, créons un fichier de service systemd qui exécutera ce script :
- Créez un nouveau fichier de service avec les privilèges
sudo:
sudo nano /etc/systemd/system/hello-service.service
- Ajoutez le contenu suivant au fichier de service :
[Unit]
Description=Hello Service Demo
After=network.target
[Service]
Type=simple
ExecStart=/home/labex/project/scripts/hello-service.sh
Restart=on-failure
User=labex
[Install]
WantedBy=multi-user.target
Commençons par comprendre chaque section de ce fichier :
[Unit]: Contient des métadonnées et des dépendances
Description: Une description lisible par l'homme du serviceAfter: Spécifie que ce service devrait démarrer après que le réseau soit prêt
[Service]: Définit comment le service devrait être exécuté
Type=simple: Le service démarre immédiatementExecStart: La commande à exécuter (notre script)Restart: Redémarre automatiquement le service s'il échoueUser: Le compte utilisateur pour exécuter le service
[Install]: Définit quand et comment le service devrait être activé
WantedBy: Spécifie quand le service devrait être démarré (multi-user.target signifie le fonctionnement normal du système)
Enregistrez le fichier et quittez l'éditeur (appuyez sur
Ctrl+X, puisY, puisEntréedans nano).Examnons notre nouveau fichier de service créé :
cat /etc/systemd/system/hello-service.service
Vous devriez voir le contenu que vous venez d'ajouter au fichier.

Dans l'étape suivante, vous allez apprendre comment charger et démarrer ce service à l'aide de la commande systemctl daemon-reload.
Utilisation de systemctl daemon-reload pour appliquer les modifications
Maintenant que vous avez créé un fichier de service systemd, vous devez informer systemd de ce nouveau service. C'est là que la commande systemctl daemon-reload entre en jeu.
Qu'est-ce que systemctl daemon-reload?
La commande systemctl daemon-reload indique à systemd de recharger tous les fichiers de service et de mettre à jour sa configuration interne. Cela est nécessaire chaque fois que vous :
- Créez un nouveau fichier de service
- Modifiez un fichier de service existant
- Supprimez un fichier de service
Sans exécuter cette commande, systemd ne reconnaîtra pas vos modifications.
Recharger la configuration de systemd
- Exécutez la commande suivante pour recharger la configuration de systemd :
sudo systemctl daemon-reload
Cette commande ne produit pas de sortie lorsqu'elle est exécutée avec succès, mais elle met à jour la configuration interne de systemd.
- Maintenant, vérifions si systemd reconnaît notre nouveau service :
systemctl status hello-service
Vous devriez voir une sortie montrant que le service est chargé mais inactif :
● hello-service.service - Hello Service Demo
Chargé : chargé (/etc/systemd/system/hello-service.service ; désactivé ; paramètre fourni par le fabricant : activé)
Actif : inactif (mort)
Démarrer le service
- Démarrons notre service :
sudo systemctl start hello-service
- Vérifions à nouveau l'état pour voir s'il est en cours d'exécution :
systemctl status hello-service

Vous devriez maintenant voir que le service est actif et en cours d'exécution :
● hello-service.service - Hello Service Demo
Chargé : chargé (/etc/systemd/system/hello-service.service ; désactivé ; paramètre fourni par le fabricant : activé)
Actif : actif (en cours d'exécution) depuis [horodatage] ; il y a [durée]
PID principal: [numéro de PID] (hello-service.sh)
Tâches: 2 (limite : 4915)
Mémoire : 592,0K
CPU : 5ms
Groupe de contrôle: /system.slice/hello-service.service
└─[numéro de PID] /bin/bash /home/labex/project/scripts/hello-service.sh
- Vérifions que notre service fonctionne effectivement en consultant le fichier de journal qu'il crée :
cat /tmp/hello-service.log
Vous devriez voir plusieurs lignes de sortie similaires à :
Hello from custom service: Wed Jun 14 15:30:45 UTC 2023
Hello from custom service: Wed Jun 14 15:30:55 UTC 2023
Hello from custom service: Wed Jun 14 15:31:05 UTC 2023
Les entrées de journal montreront la date et l'heure actuelles, confirmant que notre service est en cours d'exécution et exécute le script comme prévu.
- Activez le service pour qu'il démarre automatiquement au démarrage du système :
sudo systemctl enable hello-service
Vous devriez voir une sortie similaire à :
Created symlink /etc/systemd/system/multi-user.target.wants/hello-service.service → /etc/systemd/system/hello-service.service.
Cela signifie que le service est désormais activé et démarrera automatiquement lorsque le système démarrera.
Maintenant, vous avez créé avec succès un service, utilisé systemctl daemon-reload pour informer systemd de son existence et démarré le service. Dans l'étape suivante, vous allez modifier le service et appliquer les modifications.
Modification de la configuration du service
Dans cette étape, vous allez modifier la configuration de votre service et appliquer les modifications à l'aide de systemctl daemon-reload. Cela démontrera l'importance de cette commande lors de la mise à jour des configurations de service.
Modification du fichier de service
Modifions notre service pour changer la fréquence à laquelle il enregistre des messages :
- Éditez le fichier de service :
sudo nano /etc/systemd/system/hello-service.service
- Ajoutez une nouvelle variable d'environnement à la section
[Service]pour contrôler l'intervalle de sommeil. Ajoutez cette ligne après la ligneUser=labex:
Environment="SLEEP_INTERVAL=5"
Enregistrez et quittez le fichier (appuyez sur
Ctrl+X, puisY, puisEntréedans nano).Maintenant, éditez le script pour utiliser cette variable d'environnement :
nano ~/project/scripts/hello-service.sh
- Modifiez le script pour utiliser la variable d'environnement (remplacez le contenu complet par ceci) :
#!/bin/bash
## Utilise 10 secondes par défaut si la variable d'environnement n'est pas définie
INTERVAL=${SLEEP_INTERVAL:-10}
while true; do
echo "Hello from custom service: $(date) - Interval: ${INTERVAL}s" >> /tmp/hello-service.log
sleep $INTERVAL
done
- Enregistrez et quittez l'éditeur (appuyez sur
Ctrl+X, puisY, puisEntréedans nano).
Application des modifications
Maintenant que vous avez apporté des modifications au fichier de service et au script, vous devez appliquer ces modifications :
- Tout d'abord, rechargez la configuration de systemd :
sudo systemctl daemon-reload
- Ensuite, redémarrez le service pour appliquer les modifications :
sudo systemctl restart hello-service
- Vérifiez l'état du service :
systemctl status hello-service
Vous devriez voir que le service est en cours d'exécution avec la configuration mise à jour.
- Vérifiez que les modifications ont eu effet en consultant le fichier de journal :
sleep 15 ## Attendez pour collecter quelques entrées de journal
cat /tmp/hello-service.log | tail -5
Vous devriez maintenant voir que le service enregistre des messages toutes les 5 secondes au lieu de 10, et les entrées de journal devraient inclure les nouvelles informations sur l'intervalle :
Hello from custom service: Wed Jun 14 15:45:10 UTC 2023 - Interval: 5s
Hello from custom service: Wed Jun 14 15:45:15 UTC 2023 - Interval: 5s
Hello from custom service: Wed Jun 14 15:45:20 UTC 2023 - Interval: 5s

Comprendre ce qui s'est passé
Commençons par comprendre ce qui vient de se passer :
- Vous avez modifié le fichier de service pour ajouter une variable d'environnement.
- Vous avez mis à jour le script pour utiliser cette variable d'environnement.
- Vous avez exécuté
systemctl daemon-reloadpour informer systemd des modifications apportées au fichier de service. - Vous avez redémarré le service pour appliquer ces modifications.
Sans la commande systemctl daemon-reload, systemd n'aurait pas reconnu les modifications apportées au fichier de service, et la variable d'environnement n'aurait pas été transmise au script lors du redémarrage du service.
Cela démontre pourquoi systemctl daemon-reload est essentielle chaque fois que vous modifiez des fichiers de service - elle assure que systemd est au courant de vos modifications avant que vous tentiez de les appliquer en démarrant ou en redémarrant des services.
Dépannage et meilleures pratiques
Dans cette dernière étape, vous allez apprendre à identifier les problèmes courants qui peuvent se produire lors de la manipulation des services systemd et à les résoudre. Vous allez également découvrir quelques meilleures pratiques pour travailler avec systemctl daemon-reload.
Dépannage des problèmes courants
1. Le service ne démarre pas
Si votre service ne démarre pas, la première étape est de vérifier son état :
systemctl status hello-service
Cela fournit souvent des informations d'erreur détaillées. Créons intentionnellement une erreur pour voir comment la résoudre :
- Éditez le fichier de service :
sudo nano /etc/systemd/system/hello-service.service
- Modifiez la ligne
ExecStartpour pointer vers un script qui n'existe pas :
ExecStart=/home/labex/project/scripts/non-existent.sh
Enregistrez et quittez l'éditeur.
Rechargez la configuration de systemd et essayez de redémarrer le service :
sudo systemctl daemon-reload
sudo systemctl restart hello-service
- Vérifiez l'état pour voir l'erreur :
systemctl status hello-service
Vous devriez voir des messages d'erreur indiquant que le script n'existe pas :
● hello-service.service - Hello Service Demo
Chargé : chargé (/etc/systemd/system/hello-service.service ; activé ; paramètre fourni par le fabricant : activé)
Actif : échoué (Résultat : code de sortie) depuis [horodatage] ; il y a [durée]
Processus: [pid] ExecStart=/home/labex/project/scripts/non-existent.sh (code=exited, status=203/EXEC)
PID principal: [pid] (code=exited, status=203/EXEC)
CPU : 5ms
[horodatage] systemd[1]: Started Hello Service Demo.
[horodatage] systemd[pid]: hello-service.service: Échec d'exécution de la commande : Aucun fichier ou dossier de ce type
[horodatage] systemd[pid]: hello-service.service: Échec à l'étape EXEC lors de la génération de /home/labex/project/scripts/non-existent.sh : Aucun fichier ou dossier de ce type
[horodatage] systemd[1]: hello-service.service: Le processus principal est sorti, code=exited, status=203/EXEC
[horodatage] systemd[1]: hello-service.service: Échoué avec le résultat 'code de sortie'.
- Corrigez le fichier de service pour pointer à nouveau vers le bon script :
sudo nano /etc/systemd/system/hello-service.service
- Changez la ligne
ExecStartpour qu'elle soit à nouveau :
ExecStart=/home/labex/project/scripts/hello-service.sh
- Enregistrez et quittez, puis rechargez et redémarrez :
sudo systemctl daemon-reload
sudo systemctl restart hello-service
- Vérifiez que le service est à nouveau en cours d'exécution :
systemctl status hello-service
2. Lecture des journaux pour plus d'informations
Lors du dépannage, vous pouvez utiliser journalctl pour afficher les journaux détaillés :
sudo journalctl -u hello-service
Cela affiche tous les journaux de l'unité hello-service, qui peuvent être précieux pour diagnostiquer les problèmes.
Pour voir seulement les journaux les plus récents :
sudo journalctl -u hello-service -n 20
Pour suivre les journaux en temps réel (similaire à tail -f) :
sudo journalctl -u hello-service -f
Appuyez sur Ctrl+C pour quitter le mode de suivi des journaux.
Meilleures pratiques pour travailler avec systemctl daemon-reload
Voici quelques meilleures pratiques à suivre lorsqu'on travaille avec systemd et la commande daemon-reload :
Toujours recharger après les modifications : Toujours exécutez
systemctl daemon-reloadaprès avoir modifié, ajouté ou supprimé des fichiers d'unité systemd.Vérifiez la syntaxe avant d'appliquer : Vous pouvez utiliser la commande suivante pour vérifier les erreurs de syntaxe dans vos fichiers de service avant de recharger :
sudo systemd-analyze verify /etc/systemd/system/hello-service.service
Si il n'y a pas d'erreurs, cette commande ne produit pas de sortie. Toute erreur de syntaxe sera signalée.
Utilisez des modèles de service : Pour les services qui nécessitent plusieurs instances, utilisez des modèles de service (fichiers nommés comme
service@.service) pour éviter les duplications.Vérifiez les dépendances des services : Assurez-vous que vos services ont les directives
After=etRequires=correctes pour vous assurer qu'ils démarrent dans le bon ordre.Nettoyez correctement : Lorsque vous supprimez un service, assurez-vous de l'arrêter et de le désactiver avant de supprimer le fichier de service :
sudo systemctl stop hello-service
sudo systemctl disable hello-service
sudo rm /etc/systemd/system/hello-service.service
sudo systemctl daemon-reload
Nettoyons maintenant notre service d'exemple :
sudo systemctl stop hello-service
sudo systemctl disable hello-service
Vous devriez voir une sortie indiquant que le lien symbolique a été supprimé :
Removed /etc/systemd/system/multi-user.target.wants/hello-service.service.
Nous ne supprimerons pas le fichier de service pour le moment car nous en avons encore besoin pour la vérification.
Maintenant, vous comprenez comment créer, modifier et résoudre les problèmes des services systemd, ainsi que l'importance de la commande systemctl daemon-reload dans la gestion de ces services.
Sommaire
Dans ce laboratoire, vous avez appris à utiliser la commande systemctl daemon-reload pour gérer les démon de système et les services sur votre système Linux. Vous avez :
- Compris les bases de systemd et systemctl
- Créé un fichier de service systemd personnalisé
- Utilisé systemctl daemon-reload pour appliquer des modifications aux configurations de service
- Modifié les fichiers de service et appliqué ces modifications
- Appris à résoudre les problèmes courants et à suivre les meilleures pratiques
La commande systemctl daemon-reload est essentielle lorsqu'on travaille avec les services systemd, car elle assure que le gestionnaire systemd est au courant de toutes les modifications que vous apportez aux configurations de service. Sans cette commande, vos modifications aux fichiers de service ne seraient pas reconnues par le système avant le prochain redémarrage.
Ces connaissances seront précieuses lorsque vous continuerez à travailler avec des systèmes Linux, vous permettant de gérer efficacement les services et d'assurer que vos modifications de configuration sont correctement appliquées.



