¿Cómo enumerar todos los servicios habilitados de systemctl?

279

¿Cómo puedo enumerar todos los enabledservicios systemctl?

Sé que ejecutar el systemctlcomando por sí solo enumera todos los servicios, pero me gustaría obtener solo enabledlos.

oceanBT
fuente
¿Qué quieres decir con habilitado? ¿Te refieres a los servicios que se están ejecutando?
Gen
77
@Gen habilitar un servicio es bastante diferente de iniciarlo. Ver man systemctl.
Jos
Fascinante. La respuesta con la calificación más baja es la respuesta más "correcta", aunque claramente no es la mejor respuesta. Esta excelente pregunta (y sus respuestas) es un ejemplo interesante de cómo systemd viola los principios de diseño de larga data (y brillantes) de Unix & Co. @FelipeAlvarez se queja de que la respuesta más aceptada asume que systemd sigue la filosofía de diseño de unix, pero systemd / systemctl puede hacer exactamente lo que quiere (los usuarios más experimentados solo considerarán esa hinchazón completa). Empiezo a ver con mayor claridad por qué Linus Torvalds es tan vehementemente crítico con systemd.
BISI

Respuestas:

412

systemctl list-unit-files | grep enabledenumerará todos los habilitados .

Si desea cuáles se están ejecutando actualmente , necesita systemctl | grep running.

Usa el que estás buscando. Habilitado, no significa que se esté ejecutando. Y correr no significa que esté habilitado. Son dos cosas diferentes.

Habilitado significa que el sistema ejecutará el servicio en el próximo arranque. Entonces, si habilita un servicio, aún necesita iniciarlo manualmente, o reiniciar y comenzará.

Ejecutar significa que se está ejecutando en este momento, pero si no está habilitado, no se reiniciará cuando reinicies.

dorio
fuente
55
molesto tener que usar una herramienta externa (grep) para mostrar esta información vital. Pero gracias por mostrarnos el camino :)
Felipe Alvarez
34
@FelipeAlvarez Correcto. Pero así es como funciona Linux. Muchos binarios pequeños que funcionan bien entre sí. systemctl hace lo que se le pide, enumera los servicios. No hay un comando de filtrado incorporado en systemctl porque grep ya existe y puede hacerlo bien con la salida de cualquier programa. Así es como siempre ha sido :)
Dorian
3
Estoy de acuerdo y así debería ser. Pero, systemd ya intenta hacer TANTO que me pregunto por qué no puede enumerar los servicios habilitados.
Felipe Alvarez
55
systemctl | grep running¡no me enumeres nada! Incluso si algo se está ejecutando solo se enumera en cuanto a su estado como:enabled, disabled, masked, static
Cirelli94
27
Más simple:systemctl list-unit-files --state=running
Será el
93

man systemctl estados:

--state=

El argumento debe ser una lista separada por comas de unidad LOAD, SUB, o ACTIVEestados. Al enumerar unidades, muestre solo aquellas en los estados especificados. Se usa --state=failedpara mostrar solo unidades fallidas.

Explicación:

LOAD: Refleja si la definición de la unidad se cargó correctamente.
ACTIVE: El estado de activación de la unidad de alto nivel, es decir, generalización de SUB.
SUB: El estado de activación de la unidad de bajo nivel, los valores dependen del tipo de unidad.

Aunque también puede usar esto para mostrar solo enabledunidades con:

systemctl list-unit-files --state=enabled

Si una unidad es enabledeso significa que el sistema la iniciará al inicio. Aunque configurar algo en enabledrealidad startno lo hace, por lo que deberá hacerlo manualmente o reiniciar el sistema después de configurarlo enabled.

Martin Thornton
fuente
55
Para habilitar y comenzar al mismo tiempo:systemctl enable --now ...
Aurélien Ooms
1
--state=enabledno tiene efecto en la versión 215 de systemd (en Raspbian 8 Jessie), pero funciona en la versión 229 de systemd (en Ubuntu 16.04.03 Xenial).
mpb
@mpb: Sin embargo, funciona perfectamente bien en la versión 235 en Arch Linux.
64

Para enumerar todos los systemdservicios que se encuentran state=activeysub=running

systemctl list-units --type=service --state=running

Para enumerar todos los servicios systemdque están en state=activey sub ejecutando o saliendo

systemctl list-units --type=service --state=active
Ankit Kumar Honey
fuente
12

Para ver los servicios 'habilitados', incluidos los que aún están en ejecución inicial / inicial:

systemctl list-unit-files --type service --state enabled,generated

Para ver todos los servicios actualmente en ejecución, ejecute:

systemctl list-units --type service --state running
nix-power
fuente
Por desgracia, los nombres de los servicios pueden ser diferentes en las dos listas - por ejemplo sshdvs. sshy syslogfrente rsyslog.
OrangeDog
La única respuesta correcta "no grep". Aunque no estoy seguro de por qué se menciona advenedizo ...
rogerdpack
2

También una descripción general de todos los servicios activos y fallidos:

systemctl list-units --type service --state running,failed
panticz.de
fuente