379 votes

Comment supprimer les services systemd

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?

592voto

Mark Lakata Points 6591

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.

15 votes

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_Lin‌​ux/…

17 votes

J'ai aussi dû supprimer /etc/init.d/[servicename] avant d'exécuter systemctl reset-failed

14 votes

À 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].

62voto

Tom Lokhorst Points 7733

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.

10 votes

Cela n'est pas du tout ce que la question demande. Pourquoi diable cela a-t-il été voté positivement 17 fois?

4 votes

Voici la seule réponse correcte. Les autres avec plus de votes et la coche sont des solutions de contournement.

13 votes

Je n'ai pas lu la question de l'OP, mais c'était la réponse que je cherchais.

40voto

Adem Points 738

Il semble que vous l'ayez désinstallé, mais que vous n'ayez pas supprimé le crochet systemd :

# systemctl disable [servicename]

11voto

garlicFrancium Points 239

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 :

  1. systemctl stop [nomduservice]
  2. chkconfig [nomduservice] off OU pour les nouveaux systèmes systemctl disable [nomduservice]
  3. systemctl daemon-reload
  4. 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.

2 votes

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]

3 votes

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

1 votes

Chkconfig non trouvé dans ubuntu 16

5voto

reox Points 1444

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

  1. l'unité est toujours présente dans l'un des répertoires de systemd
  2. l'unité n'existe pas mais un lien de fichier est toujours présent dans l'un des répertoires de 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 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

SistemesEz.com

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.

Powered by:

X