Cómo eliminar servicios systemd

181

Si instalo un nuevo servicio, luego decido que ya no quiero esa aplicación y la elimino, el servicio todavía aparece en la salida systemctlcomo error .

¿De dónde viene esto y cómo puedo eliminarlos a fondo?

emel
fuente

Respuestas:

295

Mi receta para la eliminación del servicio (¡tenga cuidado con las rmdeclaraciones!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

Es posible que el servicio systemd 'envuelva' los scripts de estilo antiguo en /etc/init.d, por lo que es posible que también desee limpiar eso, pero no es donde viven los servicios systemd.

Mark Lakata
fuente
77
Tenga en cuenta que hay varias ubicaciones donde se almacenan los archivos de la unidad Systemd, en particular /usr/lib/systemd/systemy también /etc/systemd/system/. Para referencia, consulte: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington
66
También tuve que eliminar /etc/init.d/[servicename]antes de corrersystemctl reset-failed
Andrea
44
Bien, olvidé desactivar antes de eliminar los archivos de la unidad. Por cierto, para encontrar todos los archivos de la unidad para eliminar, inspecciono la salida de systemctl cat [servicename].
Amir
Puede ser una secuencia de comandos de estilo antiguo "envuelta" en /etc/init.d/ pero si no la elimina, seguirá apareciendo en los servicios que quedan de su eliminación. Puedo decirte que ese fue el caso para mí. Simplemente puede agregar eso a su respuesta para hacerlo más completo, pero esperamos que la próxima persona que lo necesite vea los comentarios.
Marlon
1
Eso funcionó, gracias, pero no estoy seguro de por qué estoy hecho para limpiar esta basura manualmente.
Rolf
25

Probablemente estés buscando reset-failed:

$ sudo systemctl reset-failed
$

Desde la página de manual de systemd:

reset-failed [PATTERN...]

Restablezca el estado "fallido" de las unidades especificadas, o si no se pasa el nombre de la unidad, restablezca el estado de todas las unidades. Cuando una unidad falla de alguna manera (es decir, el proceso sale con un código de error distinto de cero, finaliza de forma anormal o se agota el tiempo de espera), ingresará automáticamente al estado "fallido" y el administrador registrará su estado y código de salida para su introspección hasta que el servicio se reinicia o restablece con este comando.

Vebjorn Ljosa
fuente
2
Eso no es lo que la pregunta está pidiendo en absoluto. ¿Por qué demonios se ha votado esto 17 veces?
psusi
1
Esta es la única respuesta correcta. Los otros con más votos a favor y la marca de verificación son soluciones alternativas.
Thomas
1
No he leído la pregunta del OP, pero esta fue la respuesta que estaba buscando.
CousinCocaine
23

Parece que lo desinstaló, pero no eliminó el gancho systemd:

# systemctl disable [servicename]

nerdwaller
fuente
4

Agregando a la respuesta de @ mark-lakata y teniendo en cuenta la atención requerida para el rmcomando. [chkconfig]puede simplificar el proceso ( haga clic aquí para leer sobre chkconfig )

Para repetir la lista de comandos:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

Nota: El primer comando es opcional dependiendo de si desea mantener el servicio en ejecución en la sesión actual o no (en cuanto a esta pregunta, se debe usar el comando).

El segundo comando se encarga tanto de deshabilitar como de eliminar (siguiendo los enlaces simbólicos) el servicio.

ajoFrancio
fuente
1
chkconfigfue el comando original para habilitar / deshabilitar los servicios SysVinit. En los sistemas que usan systemd, puede estar presente como un comando de compatibilidad con versiones anteriores; pero el systemctlcomando nativo es igual de simple:systemctl disable [servicename]
telcoM
1
De acuerdo, pero la razón por la que uso este comando es que no tienes que ejecutar explícitamente el comando rm
garlicFrancium
1

Eliminar un servicio de systemd:

Systemd usa la unidad (archivo para definir servicios) para eliminar un servicio que la unidad debe eliminarse ... aquí hay una lista de ubicaciones de unidades:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

Actualizar systemd:

systemctl daemon-reload
systemctl reset-failed

Servicios fantasma (no encontrado):

Systemd puede enumerar servicios fantasmas (no encontrados) incluso si la unidad se elimina por muchas razones

  1. unidad todavía presente en uno de los directorios systemd
  2. la unidad no sale pero todavía hay un enlace de archivo en uno de los directorios systemd
  3. el servicio se usa en otra (s) unidad (es) *

(*) si un servicio se menciona en otra unidad pero no existe, systemd seguirá enumerando ese servicio con el estado no encontrado incluso si no hay un archivo de unidad ... puede buscar qué unidad está usando ese servicio con una búsqueda de texto y edite esas unidades (no recomendado si planea instalar ese servicio más adelante)

intika
fuente