So entfernen Sie systemd-Dienste


179

Wenn ich einen neuen Dienst installiere und dann entscheide, dass ich diese Anwendung nicht mehr möchte, und ihn lösche, wird der Dienst in der Ausgabe von weiterhin systemctlals Fehler aufgeführt .

Woher kommt das und wie kann ich sie gründlich entfernen?

Antworten:


291

Mein Rezept für Service-Auslöschung (Vorsicht mit den rmAussagen!)

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

Es ist möglich , dass der systemd Service ‚Wraps‘ der alten Stil - Skripte in /etc/init.d, so können Sie , dass bis reinigen wollen, aber das ist nicht , wo systemd Dienstleistungen leben.


7
Beachten Sie, dass es mehrere Speicherorte für Systemd-Gerätedateien gibt, insbesondere /usr/lib/systemd/systemauch /etc/systemd/system/. Weitere Informationen finden
Mark Edington

6
Ich musste auch entfernen, /etc/init.d/[servicename]bevor ich ranntesystemctl reset-failed
Andrea

4
Richtig, ich habe vergessen zu deaktivieren, bevor ich die Gerätedateien entferne. Übrigens, um alle zu entfernenden Gerätedateien zu finden, überprüfe ich die Ausgabe von systemctl cat [servicename].
Amir

Möglicherweise handelt es sich um ein "umbrochenes" altes Skript in /etc/init.d/. Wenn Sie es jedoch nicht entfernen, wird es immer noch unter den Diensten angezeigt, die von Ihrer Entfernung übrig geblieben sind. Ich kann Ihnen sagen, dass das bei mir der Fall war. Sie können das einfach zu Ihrer Antwort hinzufügen, um sie vollständiger zu machen, aber hoffentlich wird die nächste Person, die es benötigt, die Kommentare lesen.
Marlon

1
Das hat funktioniert, danke, aber ich bin nicht sicher, warum ich diesen Müll manuell aufräumen soll.
Rolf

25

Sie suchen wahrscheinlich nach reset-failed:

$ sudo systemctl reset-failed
$

Von der systemd Manpage:

reset-failed [PATTERN...]

Setzen Sie den Status "Fehlgeschlagen" der angegebenen Einheiten zurück, oder setzen Sie den Status aller Einheiten zurück, wenn kein Einheitenname übergeben wird. Wenn eine Einheit auf irgendeine Weise ausfällt (dh der Prozess wird mit einem Fehlercode ungleich Null beendet, wird abnormal beendet oder es tritt eine Zeitüberschreitung auf), wechselt sie automatisch in den Status "Fehlgeschlagen", und ihr Beendigungscode und Status werden vom Administrator bis zum Service zur Überprüfung aufgezeichnet wird mit diesem Befehl neu gestartet oder zurückgesetzt.


2
Darum geht es in der Frage überhaupt nicht. Warum um alles in der Welt wurde dies 17 Mal angehoben?
Psusi

1
Dies ist die einzig richtige Antwort. Die anderen mit mehr positiven Bewertungen und dem Häkchen sind Problemumgehungen.
Thomas

1
Ich habe die Frage des OP nicht gelesen, aber das war die Antwort, nach der ich gesucht habe.
CousinCocaine

23

Klingt so, als hättest du es deinstalliert, aber den systemd-Haken nicht entfernt:

# systemctl disable [servicename]


4

Ergänzen Sie die Antwort von @ mark-lakata und beachten Sie die für den rmBefehl erforderliche Aufmerksamkeit . [chkconfig]kann den Prozess vereinfachen! ( Klicken Sie hier, um mehr über chkconfig zu erfahren. )

So wiederholen Sie die Liste der Befehle:

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

Hinweis: Der erste Befehl ist optional, abhängig davon, ob der Dienst in der aktuellen Sitzung ausgeführt werden soll oder nicht (für diese Frage sollte der Befehl verwendet werden).

Der 2. Befehl kümmert sich sowohl um das Deaktivieren als auch um das Entfernen des Dienstes (den symbolischen Links folgend).


1
chkconfigwar der ursprüngliche Befehl zum Aktivieren / Deaktivieren von SysVinit-Diensten. In Systemen systemd, in denen es verwendet wird, kann es als Abwärtskompatibilitätsbefehl vorhanden sein. aber der native systemctlbefehl ist genauso einfach:systemctl disable [servicename]
telcoM

1
Okay, aber der Grund, warum ich diesen Befehl verwende, ist, dass Sie den Befehl rm
garlicFrancium 29.07.18

1

Einen Dienst von systemd entfernen:

Systemd verwendet unit (Datei zum Definieren von Diensten), um einen Dienst zu entfernen. Die Einheit muss entfernt werden. Hier ist eine Liste der Einheitenstandorte:

/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)

System aktualisierend:

systemctl daemon-reload
systemctl reset-failed

Ghost-Services (nicht gefunden):

Systemd kann Ghost-Dienste (nicht gefunden) auflisten, auch wenn das Gerät aus verschiedenen Gründen gelöscht wurde

  1. Einheit noch in einem der systemd-Verzeichnisse vorhanden
  2. Das Gerät wird nicht beendet, aber in einem der systemd-Verzeichnisse ist noch eine Dateiverbindung vorhanden
  3. Der Dienst wird in anderen Einheiten verwendet. *

(*) Wenn ein Dienst in einem anderen Gerät erwähnt wird, aber nicht existiert, listet systemd diesen Dienst immer noch mit dem Status nicht gefunden auf, auch wenn es keine Gerätedatei gibt ... Sie können mit einer Textsuche suchen, welches Gerät diesen Dienst verwendet und bearbeiten Sie diese Einheiten (nicht empfohlen, wenn Sie diesen Dienst später installieren möchten)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.