Como remover unidades systemd ausentes?

40

Estou tendo problemas para descobrir como remover unidades systemd que não possuem mais arquivos. Eles ainda parecem permanecer no sistema de alguma forma.

As antigas unidades quebradas que estou tentando remover:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> [email protected] not-found failed failed [email protected]
<E2><97><8F> [email protected] not-found failed failed [email protected]

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

Os arquivos não existem, mas uma recarga ainda mantém essas unidades:

core@ip-172-16-32-83 ~ $ systemctl list-unit-files [email protected]
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> [email protected] not-found failed failed [email protected]
<E2><97><8F> [email protected] not-found failed failed [email protected]

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

Não há arquivos relacionados a eles que eu possa encontrar:

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

Então, como faço para me livrar deles?

Andy Shinn
fonte
Você não menciona, mas acho que falhará se você tentar systemctl disable, certo?
Dawud
2
Apenas existe com 0. Não há nada para desativar (ele já está ausente / desativado).
Andy Shinn
Eu tentei todas as soluções sugeridas aqui (e abaixo até agora) e reiniciei e nada funcionou. As unidades que estou tentando remover foram instaladas ou tentadas de instalar e, posteriormente, limpas. Então, aparentemente, o apt purge não remove a configuração fornecida ao systemd. Ainda não está claro para mim se essas unidades "não encontradas" causam problemas.
Visualização elíptica
Eu suspeito que posso excluir arquivos em / var / lib / systemd / deb-systemd-helper-enabled / mas não tenho certeza se quero mexer com isso. Parece que tenho dois becos sem saída conhecidos lá: mariadb.service.dsh-also e mysql.service.dsh-also
Elliptical view
@Elipticalview Faça um backup desses arquivos, apenas por precaução, e depois remova-os?
gf_

Respostas:

76

O comando que você procura é systemctl reset-failed

user227117
fonte
3
Obrigado! Eu não sei por que isso não era mais óbvio para mim ...
Andy Shinn
6
Isso funcionou para finalmente limpar um serviço "real", mas eu tenho um serviço de alias que se recusa a ir embora. Eu tentei disable, daemon-reloade reset-failedmas o serviço apelido surge como not-found inactive deadsempre. Também procurei no disco por algo que corresponda ao nome do serviço sem resultados.
MarkLakata
3
Eu acabei de encontrar isso e systemctl stop <service>trabalhei para mim.
mpontillo
O mesmo se aplica aos temporizadores - eles precisam ser parados primeiro antes de serem reset-failedlimpos.
Rustyx
Meio que funcionou para mim, mas eu tive que mascarar e depois desmascarar primeiro um deles. Além disso, tive que parar um, mascarar e desmascarar, após o que a falha de redefinição finalmente se livrou de tudo.
tgunr 18/07
2

Quando o systemd analisa arquivos de definição de unidade, ele anota quaisquer outras unidades relacionadas chamadas no arquivo - se essas outras unidades existem ou não.

$ 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 uma unidade aparece como "não encontrada", não é necessariamente um erro - tudo o que sabemos é que uma definição de unidade local alega ter algum relacionamento com ela. Esse relacionamento pode não ser do nosso interesse. Por exemplo, poderia ser "Before:"outra unidade, mas não usamos essa outra unidade.

AaronDanielson
fonte
0

Parece que o systemd mantém links, mas não sabe o que fazer com eles quando você exclui o arquivo da unidade.

Você pode tentar removê-los manualmente /etc/systemd/system/suspend.target.wants/, mas é claro que systemctl reset-failedde uma resposta anterior parece uma opção melhor.

$ 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.
Rolf
fonte