Si j'installe un nouveau service puis décide de ne plus vouloir cette application et la supprime, le service est toujours répertorié dans la sortie de systemctl
comme erreur.
D'où vient cela et comment puis-je les supprimer complètement?
Si j'installe un nouveau service puis décide de ne plus vouloir cette application et la supprime, le service est toujours répertorié dans la sortie de systemctl
comme erreur.
D'où vient cela et comment puis-je les supprimer complètement?
Ma recette pour l'oblitération du service (soyez prudent avec les déclarations rm
!)
systemctl stop [nomduservice]
systemctl disable [nomduservice]
rm /etc/systemd/system/[nomduservice]
rm /etc/systemd/system/[nomduservice] # et les liens symboliques qui pourraient être liés
rm /usr/lib/systemd/system/[nomduservice]
rm /usr/lib/systemd/system/[nomduservice] # et les liens symboliques qui pourraient être liés
systemctl daemon-reload
systemctl reset-failed
Il est possible que le service systemd « enveloppe » les anciens scripts de style /etc/init.d, donc vous voudrez peut-être les nettoyer aussi, mais ce n'est pas là où vivent les services systemd.
Soyez conscient qu'il existe plusieurs emplacements où les fichiers d'unités Systemd sont stockés, notamment /usr/lib/systemd/system
et également /etc/systemd/system/
. Pour plus d'informations, consultez : access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
À droite, j'ai oublié de désactiver avant de supprimer les fichiers d'unité. BTW, pour trouver tous les fichiers d'unité à supprimer, j'inspecte la sortie de systemctl cat [servicename]
.
Vous cherchez probablement reset-failed
:
$ sudo systemctl reset-failed
$
De la page de manuel de systemd :
reset-failed [PATTERN...]
Réinitialise l'état "échoué" des unités spécifiées, ou si aucun nom d'unité n'est passé, réinitialise l'état de toutes les unités. Lorsqu'une unité échoue de quelque manière que ce soit (c'est-à-dire qu'un processus se termine avec un code d'erreur différent de zéro, se termine de manière anormale ou dépasse le délai imparti), elle entrera automatiquement dans l'état "échoué" et son code de sortie et son statut sont enregistrés pour être examinés par l'administrateur jusqu'à ce que le service soit redémarré ou réinitialisé avec cette commande.
Cela n'est pas du tout ce que la question demande. Pourquoi diable cela a-t-il été voté positivement 17 fois?
Voici la seule réponse correcte. Les autres avec plus de votes et la coche sont des solutions de contournement.
Ajoutant à la réponse de @mark-lakata et en gardant à l'esprit l'attention requise pour la commande rm
. [chkconfig]
peut simplifier le processus! (cliquez ici pour en savoir plus sur chkconfig)
Pour répéter la liste des commandes :
systemctl stop [nomduservice]
chkconfig [nomduservice] off
OU pour les nouveaux systèmes systemctl disable [nomduservice]
systemctl daemon-reload
systemctl reset-failed
Remarque : La 1ère commande est facultative en fonction de savoir si vous voulez que le service fonctionne pendant la session actuelle ou non (dans le cas de cette question, la commande devrait être utilisée).
La 2ème commande s'occupe à la fois de la désactivation et de la suppression (en suivant les liens symboliques) du service.
chkconfig
était la commande originale pour activer/désactiver les services SysVinit. Dans les systèmes utilisant systemd
, elle peut être présente en tant que commande de compatibilité ascendante ; mais la commande native systemctl
est tout aussi simple : systemctl disable [nomduservice]
D'accord, mais la raison pour laquelle j'utilise cette commande est que vous n'avez pas besoin d'exécuter explicitement la commande rm
Suppression d'un service de systemd :
Systemd utilise des unités (fichiers pour définir les services) pour supprimer un service, l'unité doit être supprimée... voici une liste des emplacements des unités :
/etc/systemd/system/ (et sous-répertoires)
/usr/local/etc/systemd/system/ (et sous-répertoires)
~/.config/systemd/user/ (et sous-répertoires)
/usr/lib/systemd/ (et sous-répertoires)
/usr/local/lib/systemd/ (et sous-répertoires)
/etc/init.d/ (Système de services ancien converti)
Actualiser systemd :
systemctl daemon-reload
systemctl reset-failed
Services fantômes (non trouvés) :
Systemd peut répertorier des services fantômes (non trouvés) même si l'unité est supprimée pour de nombreuses raisons
(*) Si un service est mentionné dans une autre unité mais n'existe pas, systemd répertoriera quand même ce service avec l'état non trouvé même s'il n'y a pas de fichier d'unité... vous pouvez rechercher quelle unité utilise ce service avec une recherche de texte et modifier ces unités (non recommandé si vous avez l'intention d'installer ce service ultérieurement)
Sources : Linuxhacks.org
Divulgation : Je suis le propriétaire de Linuxhacks.org
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.