Introduction
Un processus est un programme en cours d’exécution. Un service est une fonction système exécutée sur une longue durée, gérée selon une définition et une politique de cycle de vie. Sur Ubuntu, systemd lit les définitions des unités, démarre et arrête les services, suit leur état et enregistre leur sortie dans le journal système.
Dans ce laboratoire, vous utiliserez le service de pratique isolé labex-heartbeat. Vous examinerez son unité, contrôlerez son état d’exécution, configurerez son activation au démarrage, consulterez le journal et les journaux texte traditionnels, suivrez la sortie en temps réel, diagnostiquerez une défaillance contrôlée et rétablirez un fonctionnement normal. Vous ne modifierez aucun fichier d’unité et ne toucherez pas au service SSH.
Reconnaître systemd et les unités de service
Dans cette étape, vous vérifierez que systemd est disponible et distinguerez les unités en cours d’exécution des fichiers d’unités installés.
Accédez à l’espace de travail du laboratoire :
cd /home/labex/project/service-lab
Affichez la version de systemd. La première ligne suffit pour l’identifier :
systemctl --version | head -n 1
Demandez à systemd son état général :
systemctl is-system-running || true
running signifie que toutes les unités requises sont saines. Une machine virtuelle de formation peut renvoyer degraded lorsqu’une unité facultative sans rapport avec le laboratoire a échoué ; cette commande prouve néanmoins que systemd répond.
Affichez un échantillon des services actuellement en cours d’exécution :
systemctl list-units --type=service --state=running --no-pager | head -n 12
Une unité est un objet géré par systemd. Les unités de service se terminent par .service. Les fichiers d’unités décrivent ce qui peut être géré, même lorsque l’élément concerné n’est pas en cours d’exécution :
systemctl list-unit-files --type=service --no-pager | head -n 12
Enregistrez un résumé compact de systemd. La substitution de commande $(...) insère la sortie d’une commande dans le texte écrit par printf :
printf 'systemd=%s\nstate=%s\n' "$(systemctl --version | head -n 1)" "$(systemctl is-system-running)" > systemd-summary.txt
cat systemd-summary.txt
Examiner la définition et l’état d’un service
Dans cette étape, vous examinerez le service de pratique préparé avant de le démarrer.
systemctl status regroupe le chemin de l’unité chargée, son activation au démarrage, son état d’exécution, les informations sur le processus et les dernières lignes du journal :
cd /home/labex/project/service-lab
systemctl status labex-heartbeat.service --no-pager
Le service devrait être inactive (dead) et disabled. inactive signifie qu’il n’est pas actuellement en cours d’exécution ; disabled signifie qu’il n’est pas configuré pour démarrer via sa cible d’installation au démarrage. Ces deux propriétés sont indépendantes.
Affichez la définition de l’unité :
systemctl cat labex-heartbeat.service
La section [Unit] décrit l’identité et l’ordre de démarrage, [Service] définit le processus et [Install] décrit l’activation. Vous examinez uniquement cette unité préparée ; vous n’avez pas besoin d’en écrire une.
Utilisez systemctl show pour afficher des propriétés lisibles par une machine :
systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState
Enregistrez ces propriétés pour la vérification :
systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState > service-properties.txt
cat service-properties.txt
Démarrer, arrêter et redémarrer un service
Dans cette étape, vous modifierez l’état d’exécution du service de pratique et vérifierez chaque résultat.
Le démarrage et l’arrêt des services système nécessitent des privilèges élevés. Démarrez le service :
sudo systemctl start labex-heartbeat.service
Vérifiez brièvement son état actif :
systemctl is-active labex-heartbeat.service
La sortie attendue est active. Affichez l’état détaillé :
systemctl status labex-heartbeat.service --no-pager
L’état contient maintenant un PID principal. Arrêtez le service et examinez le résultat :
sudo systemctl stop labex-heartbeat.service
systemctl is-active labex-heartbeat.service || true
L’état attendu est inactive. Démarrez-le de nouveau, puis utilisez restart pour remplacer le processus en cours en une seule opération :
sudo systemctl start labex-heartbeat.service
sudo systemctl restart labex-heartbeat.service
systemctl show labex-heartbeat.service -p ActiveState -p SubState -p MainPID
À la fin de cette étape, le service doit avoir ActiveState=active et SubState=running.
Configurer l’activation au démarrage
Dans cette étape, vous distinguerez l’état d’exécution actuel du service de son activation pour les prochains démarrages.
Le service est actif depuis l’étape précédente, mais la configuration initiale a laissé son fichier d’unité désactivé. Vérifiez son activation :
systemctl is-enabled labex-heartbeat.service || true
Activez le service :
sudo systemctl enable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service
L’activation crée des liens qui associent le service à une cible de démarrage. Elle ne redémarre pas un service déjà en cours d’exécution.
Entraînez-vous à supprimer ces liens de démarrage :
sudo systemctl disable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service || true
Le service peut rester actif même si la sortie indique maintenant disabled. Réactivez-le pour rétablir l’état final du laboratoire :
sudo systemctl enable labex-heartbeat.service
Vérifiez ces deux propriétés indépendantes :
systemctl is-active labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service
Consulter les journaux d’un service avec journalctl
Dans cette étape, vous lirez la sortie récente du service dans le journal systemd et enregistrerez un instantané ciblé.
Les services gérés par systemd envoient normalement leur sortie standard et leur sortie d’erreur standard vers le journal. Consultez uniquement l’unité de pratique :
sudo journalctl -u labex-heartbeat.service -n 10 --no-pager
L’option -u sélectionne une unité, -n 10 conserve les dix enregistrements les plus récents et --no-pager les affiche directement. Vous devriez voir des enregistrements récents du signal heartbeat. Le message de démarrage a peut-être déjà défilé hors de cette vue limitée pendant que le service continuait de fonctionner.
Limitez les résultats à une période récente :
sudo journalctl -u labex-heartbeat.service --since "5 minutes ago" --no-pager
Filtrez les enregistrements dont la priorité est warning ou supérieure. Une sortie vide est un résultat sain et valide lorsque le service n’a enregistré aucun avertissement :
sudo journalctl -u labex-heartbeat.service -p warning --since "5 minutes ago" --no-pager
Enregistrez un instantané récent limité à cette unité dans l’espace de travail du projet :
cd /home/labex/project/service-lab
sudo journalctl -u labex-heartbeat.service -n 20 --no-pager > service-journal.txt
tail -n 5 service-journal.txt
Suivre un journal texte traditionnel
Dans cette étape, vous examinerez /var/log et suivrez un journal texte pendant l’arrivée de nouveaux enregistrements.
La hiérarchie /var/log contient de nombreux journaux système et applicatifs traditionnels. Affichez-en un petit échantillon :
ls -lh /var/log | head -n 12
Lisez les derniers enregistrements du service de pratique :
tail -n 5 /var/log/labex-heartbeat.log
L’option -f suit un fichier et affiche les nouvelles lignes lorsqu’un autre processus les ajoute :
tail -f /var/log/labex-heartbeat.log
Attendez de voir au moins deux nouvelles lignes heartbeat, puis appuyez sur Ctrl+C. Cela interrompt tail, mais n’arrête pas le service qui écrit dans le journal.
Filtrez les lignes heartbeat et affichez les trois plus récentes :
grep '^heartbeat ' /var/log/labex-heartbeat.log | tail -n 3
Enregistrez un échantillon de cinq lignes dans l’espace de travail du projet :
cd /home/labex/project/service-lab
tail -n 5 /var/log/labex-heartbeat.log > traditional-log-sample.txt
cat traditional-log-sample.txt
Diagnostiquer et rétablir un service défaillant
Dans cette étape, vous créerez une défaillance de configuration contrôlée, utiliserez l’état du service et les journaux pour l’identifier, puis rétablirez un fonctionnement normal.
Arrêtez le service de pratique et sauvegardez sa configuration simple :
sudo systemctl stop labex-heartbeat.service
sudo cp /etc/labex-heartbeat.conf /etc/labex-heartbeat.conf.bak
Remplacez l’intervalle numérique par une valeur non valide. Cette modification ne casse intentionnellement que le service de pratique :
sudo sed -i 's/^INTERVAL=2$/INTERVAL=invalid/' /etc/labex-heartbeat.conf
Essayez de démarrer le service. Un message d’échec est attendu :
sudo systemctl start labex-heartbeat.service || true
Examinez l’état d’échec :
systemctl status labex-heartbeat.service --no-pager || true
systemctl is-failed labex-heartbeat.service
L’état vous indique que le processus s’est terminé, mais le journal fournit la raison propre à l’application :
sudo journalctl -u labex-heartbeat.service -n 10 --no-pager
Recherchez configuration error: INTERVAL must be a positive integer. Restaurez la configuration connue comme correcte, effacez l’état d’échec enregistré, puis redémarrez le service :
sudo mv /etc/labex-heartbeat.conf.bak /etc/labex-heartbeat.conf
sudo systemctl reset-failed labex-heartbeat.service
sudo systemctl start labex-heartbeat.service
Vérifiez le rétablissement :
systemctl is-active labex-heartbeat.service
cat /etc/labex-heartbeat.conf
Le service doit être active et la configuration doit à nouveau contenir INTERVAL=2.
Résumé
Vous avez distingué les processus, les services, l’état actif et l’activation au démarrage. Vous avez examiné une unité systemd, contrôlé un service de pratique sûr avec systemctl et consulté ses enregistrements avec journalctl.
Vous avez également examiné /var/log, suivi une sortie texte en temps réel avec tail -f, utilisé conjointement l’état et les journaux pour expliquer une défaillance contrôlée, puis rétabli le service. Cette méthode, qui consiste à examiner d’abord l’état puis les journaux, constitue une base pratique pour le dépannage des services destiné aux débutants.



