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

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

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

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?


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


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.


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.