Gestion des services et des journaux système

LinuxBeginner
Pratiquer maintenant

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.