Wie entferne ich fehlende Systemeinheiten?


40

Ich habe Probleme beim Entfernen von Systemeinheiten, die keine Dateien mehr haben. Sie scheinen immer noch irgendwie im System zu verweilen.

Die alten defekten Einheiten, die ich entfernen möchte:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Die Dateien existieren nicht, aber beim erneuten Laden verweilen folgende Einheiten:

core@ip-172-16-32-83 ~ $ systemctl list-unit-files firehose-router@02.service
core@ip-172-16-32-83 ~ $ sudo systemctl daemon-reload
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Es gibt keine zugehörigen Dateien, die ich finden kann:

core@ip-172-16-32-83 ~ $ sudo find /var/run/systemd -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /etc/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /usr/lib/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $

Wie werde ich diese also los?


Sie erwähnen es nicht, aber ich denke, es schlägt fehl, wenn Sie es versuchen systemctl disable, oder?
Dawud

2
Es existiert nur mit 0. Es gibt nichts zu deaktivieren (es fehlt bereits / deaktiviert).
Andy Shinn

Ich habe alle hier vorgeschlagenen (und die folgenden) Lösungen ausprobiert und neu gestartet, und nichts hat funktioniert. Die Einheiten, die ich zu entfernen versuche, wurden einmal installiert oder versucht, zu installieren, und dann später passend gelöscht. Offensichtlich entfernt apt purge nicht die Konfiguration, die systemd zugewiesen wurde. Es ist mir immer noch nicht klar, ob diese "nicht gefundenen" Einheiten irgendwelche Probleme verursachen.
Elliptical View

Ich vermute, dass ich Dateien in / var / lib / systemd / deb-systemd-helper-enabled / löschen kann, bin mir aber nicht sicher, ob ich mich damit anlegen möchte. Ich scheine dort zwei bekannte Sackgassen zu haben: mariadb.service.dsh-also und mysql.service.dsh-also
Elliptical view

@Elipticalview Diese Dateien für alle Fälle sichern und anschließend entfernen?
gf_

Antworten:


75

Der Befehl, den Sie suchen, lautet systemctl reset-failed


3
Danke! Ich weiß nicht, warum das für mich nicht offensichtlicher war ...
Andy Shinn

5
Das hat funktioniert, um endlich einen "echten" Service zu bereinigen, aber ich habe einen Alias-Service, der sich weigert, wegzugehen. Ich habe versucht disable, daemon-reloadund reset-failedaber der Alias - Dienst kommt , wie oben not-found inactive deadimmer. Ich habe auch auf der Festplatte nach Elementen gesucht, die mit dem Dienstnamen übereinstimmen, ohne dass Ergebnisse erzielt wurden.
Mark Lakata

3
Ich bin nur darauf gestoßen und habe systemctl stop <service>für mich gearbeitet.
MPONTILLO

Gleiches gilt für Timer - sie müssen zuerst gestoppt werden, bevor reset-failedsie bereinigt werden können.
Rustyx

Art arbeitete für mich, aber ich musste zuerst für einen von ihnen maskieren und dann demaskieren. Außerdem musste man dann maskieren und demaskieren, woraufhin reset-failed endlich alles loswurde.
Donnerstag,

2

Wenn systemd Einheitendefinitionsdateien analysiert, werden alle anderen zugehörigen Einheiten, die in der Datei aufgerufen werden, notiert - unabhängig davon, ob diese anderen Einheiten vorhanden sind oder nicht.

$ systemctl --state=not-found --all
> ( ...prints list of 'not-found' units )

$ grep -r "<missing-unit>" /usr/lib/systemd/system
> ( returns files with references to <missing-unit> )

Wenn eine Einheit als "nicht gefunden" angezeigt wird, ist dies nicht unbedingt ein Fehler. Wir wissen nur, dass eine lokale Einheitendefinition behauptet, eine Beziehung zu ihr zu haben. Diese Beziehung interessiert uns vielleicht nicht. Zum Beispiel könnte es "Before:"eine andere Einheit sein, aber wir verwenden diese andere Einheit nicht.


0

Es scheint, dass systemd Verknüpfungen beibehält, aber nicht weiß, was mit ihnen zu tun ist, wenn Sie die Unit-Datei löschen.

Sie könnten versuchen, sie manuell in zu entfernen, /etc/systemd/system/suspend.target.wants/aber natürlich systemctl reset-failedklingt eine vorherige Antwort nach einer besseren Option.

$ cd /etc/systemd/system
$ sudo mv lock.service /tmp 
$ sudo systemctl disable lock.service
Failed to disable unit: No such file or directory
$ sudo mv /tmp/lock.service .
$ sudo systemctl disable lock.service
Removed /etc/systemd/system/suspend.target.wants/lock.service.
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.