¿Cómo eliminar las unidades systemd faltantes?

40

Tengo problemas para descubrir cómo eliminar las unidades systemd que ya no tienen archivos. Todavía parecen quedarse en el sistema de alguna manera.

Las viejas unidades rotas que estoy tratando de eliminar:

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

Los archivos no existen, pero una recarga aún tiene estas unidades persistentes:

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

No hay archivos relacionados con ellos que pueda 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 ~ $

Entonces, ¿cómo me deshago de estos?

Andy Shinn
fuente
No lo mencionas, pero supongo que falla si lo intentas systemctl disable, ¿verdad?
Dawud
2
Simplemente existe con 0. No hay nada que deshabilitar (ya falta / está deshabilitado).
Andy Shinn
Intenté todas las soluciones sugeridas aquí (y hasta ahora hasta ahora) y reinicié y nada funcionó. Las unidades que intento eliminar se instalaron o intentaron instalar una vez, y luego se depuraron. Entonces, aparentemente apt purge no elimina la configuración que se le da a systemd. Todavía no me queda claro si estas unidades "no encontradas" causan algún problema.
Vista elíptica
Sospecho que podría eliminar archivos en / var / lib / systemd / deb-systemd-helper-enabled / pero no estoy seguro de si quiero meterme en esto. Parece que tengo dos callejones sin salida conocidos allí: mariadb.service.dsh-also y mysql.service.dsh-also
Vista elíptica
@Elipticalview ¿Hacer una copia de seguridad de estos archivos, por si acaso, y luego eliminarlos?
gf_

Respuestas:

76

El comando que buscas es systemctl reset-failed

usuario227117
fuente
3
¡Gracias! No sé por qué eso no era más obvio para mí ...
Andy Shinn
66
Esto funcionó para finalmente limpiar un servicio "real", pero tengo un servicio de alias que se niega a desaparecer. Probé disable, daemon-reloady reset-failedaunque el servicio de alias hará como not-found inactive deadsiempre. También busqué en el disco cualquier cosa que coincida con el nombre del servicio sin resultados.
Mark Lakata
3
Me encontré con esto y systemctl stop <service>trabajé para mí.
mpontillo
Lo mismo se aplica a los temporizadores: deben detenerse antes de reset-failedpoder limpiarlos.
rustyx
Me funcionó un poco, pero tuve que enmascarar y luego desenmascarar primero para uno de ellos. Además, tuve que detener uno, luego enmascarar y desenmascarar, después de lo cual el reinicio fallido finalmente se deshizo de todos.
Jueves
2

Cuando systemd analiza los archivos de definición de unidad, toma nota de cualquier otra unidad relacionada que aparezca en el archivo, ya sea que esas otras unidades existan o no.

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

Cuando una unidad aparece como "no encontrada", no es necesariamente un error; todo lo que sabemos es que una definición de unidad local afirma tener alguna relación con ella. Es posible que esta relación no sea de nuestra interés. Por ejemplo, podría ser "Before:"alguna otra unidad, pero no usamos esa otra unidad.

AaronDanielson
fuente
0

Parece que systemd mantiene enlaces, pero no sabe qué hacer con ellos cuando elimina el archivo de la unidad.

Puede intentar eliminarlos manualmente /etc/systemd/system/suspend.target.wants/, pero, por supuesto, systemctl reset-faileduna respuesta anterior parece una mejor opción.

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