Comment supprimer les services systemd

181

Si j'installe un nouveau service, puis décide de ne plus utiliser cette application et le supprime, le service est toujours répertorié dans le résultat systemctlsous forme d' erreur .

D'où vient-il et comment puis-je les éliminer complètement?

emel
la source

Réponses:

295

Ma recette pour le service oblitération (soyez prudent avec les rmdéclarations!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

Il est possible que le service systemd «encapsule» les scripts de style ancien dans /etc/init.d; vous voudrez peut-être nettoyer cela également, mais ce n'est pas là que résident les services systemd.

Mark Lakata
la source
7
Sachez qu'il existe plusieurs endroits où les fichiers sont stockés unité systemd, notamment /usr/lib/systemd/systemet aussi /etc/systemd/system/. Pour référence, voir: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington
6
Je devais aussi retirer /etc/init.d/[servicename]avant de courirsystemctl reset-failed
Andrea
4
D'accord, j'ai oublié de désactiver avant de supprimer les fichiers de l'unité. BTW, pour trouver tous les fichiers de l'unité à supprimer, j'inspecte la sortie de systemctl cat [servicename].
Amir
Il peut s’agir d’un vieux script "encapsulé" dans /etc/init.d/, mais si vous ne le supprimez pas, vous le verrez toujours apparaître dans les services restants de votre suppression. Je peux vous dire que c'était le cas pour moi. Vous pouvez simplement ajouter cela à votre réponse pour la rendre plus complète, mais j'espère que la prochaine personne qui en aura besoin examinera les commentaires.
Marlon
1
Cela a fonctionné, merci, mais je ne sais pas pourquoi je suis obligé de nettoyer cette poubelle à la main.
Rolf
25

Vous recherchez probablement reset-failed:

$ sudo systemctl reset-failed
$

Depuis la page de manuel de systemd:

reset-failed [PATTERN...]

Réinitialisez l'état "en échec" des unités spécifiées ou, si aucun nom d'unité n'est transmis, réinitialisez l'état de toutes les unités. Lorsqu'une unité échoue de quelque manière que ce soit (c.-à-d. Processus sortant avec un code d'erreur différent de zéro, se terminant anormalement ou expirant), elle passe automatiquement à l'état "en échec" et son code de sortie et son statut sont enregistrés en vue d'une introspection par l'administrateur jusqu'à ce que le service est redémarré ou réinitialisé avec cette commande.

Vebjorn Ljosa
la source
2
Ce n'est pas ce que la question demande du tout. Pourquoi diable cela a-t-il été voté 17 fois?
Psusi
1
C'est la seule réponse correcte. Les autres avec plus de votes positifs et la case à cocher sont des solutions de contournement.
Thomas
1
Je n'ai pas lu la question du PO mais c'est la réponse que je cherchais.
CousinCocaine le
23

On dirait que vous l'avez désinstallé, mais que vous n'avez pas supprimé le hook systemd:

# systemctl disable [servicename]

nerdwaller
la source
4

En ajoutant à la réponse de @ mark-lakata et en gardant à l'esprit l'attention requise pour la rmcommande. [chkconfig]peut simplifier le processus! ( cliquez ici pour en savoir plus sur chkconfig )

Pour réitérer la liste des commandes:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

Remarque: La 1ère commande est facultative, selon que vous souhaitiez ou non que le service continue de fonctionner dans la session actuelle (la commande doit être utilisée pour cette question).

La 2ème commande permet de désactiver et de supprimer (en suivant les liens symboliques) le service.

ailFrancium
la source
1
chkconfigétait la commande d'origine pour activer / désactiver les services SysVinit. Dans les systèmes utilisant systemd, il peut être présent en tant que commande de compatibilité ascendante; mais la systemctlcommande native est aussi simple:systemctl disable [servicename]
telcoM
1
OK, mais la raison pour laquelle
j'utilise
1

Supprimer un service de systemd:

Systemd utilise unit (fichier pour définir les services) pour supprimer un service; l'unité doit être supprimée ... voici une liste des emplacements d'unités:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

Actualiser systemd:

systemctl daemon-reload
systemctl reset-failed

Services fantômes (non trouvés):

Systemd peut répertorier les services fantômes (non trouvés) même si l'unité est supprimée pour plusieurs raisons

  1. unité toujours présente sur l'un des répertoires systemd
  2. l'unité ne se ferme pas mais un lien de fichier est toujours présent sur l'un des répertoires systemd
  3. le service est utilisé dans d'autres unités *

(*) si un service est mentionné dans une autre unité mais n'existe pas, systemd listera 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 éditez ces unités (non recommandé si vous prévoyez d'installer ce service ultérieurement)

intika
la source