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
ExecStart pour 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
ExecStart pour 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
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-reload aprè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= et Requires= 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.