Come rimuovere le unità systemd mancanti?


40

Ho difficoltà a capire come rimuovere le unità di sistema che non hanno più file. Sembrano ancora indugiare nel sistema in qualche modo.

Le vecchie unità rotte che sto cercando di rimuovere:

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'.

I file non esistono, ma una ricarica ha ancora queste unità persistenti:

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'.

Non ci sono file correlati a loro che posso trovare:

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 ~ $

Quindi, come posso sbarazzarmi di questi?


Non lo dici, ma immagino che fallisca se ci provi systemctl disable, giusto?
Dawud,

2
Esiste solo con 0. Non c'è nulla da disabilitare (è già mancante / disabilitato).
Andy Shinn,

Ho provato tutte le soluzioni suggerite qui (e sotto finora) e riavviato e niente ha funzionato. Le unità che sto cercando di rimuovere una volta sono state installate o hanno tentato di installare, quindi sono state eliminate. Quindi apparentemente apt purge non rimuove la configurazione che viene data a systemd. Non mi è ancora chiaro se queste unità "non trovate" causino problemi.
Vista ellittica

Ho il sospetto che potrei essere in grado di eliminare i file in / var / lib / systemd / deb-systemd-helper-enabled / ma non sono sicuro di voler rovinare tutto. Sembra che ci siano due vicoli ciechi noti lì: mariadb.service.dsh-also e mysql.service.dsh-also
Vista ellittica

@Elipticalview Effettuare un backup di questi file, per ogni evenienza, e successivamente rimuoverli?
gf_

Risposte:


76

Il comando che stai cercando è systemctl reset-failed


3
Grazie! Non so perché non fosse più ovvio per me ...
Andy Shinn,

6
Questo ha funzionato per finalmente ripulire un servizio "reale", ma ho un servizio alias che rifiuta di andare via. Ho provato disable, daemon-reloade reset-failedma il servizio alias apparirà come not-found inactive deadsempre. Ho anche cercato sul disco tutto ciò che corrisponde al nome del servizio senza risultati.
Mark Lakata,

3
Mi sono appena imbattuto in questo e systemctl stop <service>ho lavorato per me.
mpontillo,

Lo stesso vale per i timer: devono essere arrestati prima di reset-failedpoterli ripulire.
Rustyx,

Un po 'ha funzionato per me, ma ho dovuto mascherare e poi smascherare prima uno di loro. Inoltre, ho dovuto fermarne uno, quindi mascherarlo e smascherarlo, dopo di che il reset fallito ha finalmente eliminato tutto.
martedì

2

Quando systemd analizza i file di definizione delle unità, prende nota di tutte le altre unità correlate richiamate nel file, indipendentemente dal fatto che tali altre unità esistano o meno.

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

Quando un'unità appare come "non trovata", non è necessariamente un errore - tutto ciò che sappiamo è che una definizione di unità locale afferma di avere qualche relazione con essa. Questa relazione potrebbe non essere quella a cui teniamo. Ad esempio, potrebbe trattarsi di "Before:"un'altra unità, ma non usiamo quell'altra unità.


0

Sembra che systemd mantenga i collegamenti ma non sappia cosa farne quando si elimina il file di unità.

Potresti provare a rimuoverli manualmente /etc/systemd/system/suspend.target.wants/e così, ma ovviamente systemctl reset-failedda una risposta precedente sembra un'opzione migliore.

$ 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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.