Si bien systemd resuelve muchos problemas con la administración del sistema, a veces también es confuso.
Incluso una tarea simple como enumerar los servicios de systemd podría hacerle pensar.
En este artículo, le mostraré cómo enumerar los servicios de systemd. También explicaré el resultado para que le resulte más fácil comprender los diferentes estados de los servicios.
Supongo que tiene algún conocimiento de systemd, pero incluso si no lo tiene, debería estar bien.
Cómo listar servicios activos en systemd
Los servicios systemd son administrados por systemctl
dominio. Si ejecuta systemctl
sin ningún argumento, invoca las list-units
predeterminadas subcomando y enumera varios tipos de unidades systemd como servicios, sockets, objetivos, etc.
Pero su objetivo es enumerar los servicios para especificar el tipo de unidad con --type
marcar así:
systemctl --type=service
¿Te diste cuenta de que no especifiqué las list-units
? subcomando porque es el predeterminado? Si desea seguir la convención, también puede especificarlo. Lo prefiero así y seguiré esta convención en el resto del tutorial.
systemctl list-units --type=service
En ambos casos la salida será la misma. De forma predeterminada, este comando muestra solo los servicios cargados y activos en orden alfabético:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
apparmor.service loaded active exited Load AppArmor profiles
apport.service loaded active exited LSB: automatic crash report generation
Déjame explicarte el resultado:
UNIT
:nombre de la unidad systemd.LOAD
: si el archivo de configuración de la unidad ha sido analizado por systemd.ACTIVE
:estado de alto nivel de la unidad.SUB
:estado de bajo nivel de la unidad. Una unidad activa puede estar en estado de funcionamiento o de salida. Este valor depende del tipo de servicio.
Como puede ver, puede enumerar los servicios cargados en su sistema Linux. Pero un servicio systemd activo podría estar ejecutándose o podría salirse (después de ejecutarse correctamente).
Lista de todos los servicios de systemd en ejecución
El estado activo también puede tener un subestado como en ejecución, salido, etc. Puede usar el mismo --state
marca con el subestado.
Para enumerar los servicios de systemd en ejecución, utilice --state=running
marcar así:
systemctl list-units --type=service --state=running
Aquí hay una salida de muestra para mi sistema que muestra algunos de los servicios systemd en ejecución:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
bluetooth.service loaded active running Bluetooth service
bolt.service loaded active running Thunderbolt system service
Lista todos los servicios systemd cargados, incluidos los inactivos
De forma predeterminada, el comando systemctl solo muestra las unidades cargadas y activas.
Si desea enumerar todos los servicios cargados, incluidos los inactivos, use el --all
bandera:
systemctl list-units --all --type=service
Ahora puedes ver incluso los servicios inactivos:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apparmor.service loaded active exited Load AppArmor profiles
Lista de todos los servicios systemd inactivos
Si desea ver solo los servicios inactivos, puede combinar varios indicadores como --all
y --state
así:
systemctl list-units --all --type=service --state=inactive
Como puede ver en la salida, muestra todos los servicios systemd inactivos:
UNIT LOAD ACTIVE SUB DESCRIPTION
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apport-autoreport.service loaded inactive dead Process error reports when automatic reporting is enabled
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities
apt-daily.service loaded inactive dead Daily apt download activities
● auditd.service not-found inactive dead auditd.service
Enumerar todos los servicios systemd instalados (incluso si no están cargados)
Cada unidad de systemd, ya sea servicio, socket o cualquier otra unidad, tiene un archivo de unidad que
systemctl list-unit-files --type=service
Esto es lo que debería ver:
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
acpid.service disabled enabled
alsa-restore.service static enabled
alsa-state.service static enabled
alsa-utils.service masked enabled
anacron.service enabled enabled
apparmor.service enabled enabled
apport-autoreport.service static enabled
[email protected] static enabled
Explicar cada tipo de estado será demasiado largo y no está dentro del alcance de este artículo. Tal vez escribiré sobre eso en el futuro.
Lista todos los servicios de systemd que se ejecutarán en cada arranque automáticamente
Para ver todos los servicios de systemd que se ejecutarán automáticamente cada vez que se inicie el sistema, use este comando:
systemctl list-unit-files --type=service --state=enabled
¿Estás confundido con el estado habilitado? Eso es normal. Muchos usuarios nuevos confunden un servicio del sistema habilitado con un servicio en ejecución.
Sin embargo, un servicio systemd habilitado significa que el servicio se activará automáticamente cuando se inicie el sistema.
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
anacron.service enabled enabled
apparmor.service enabled enabled
[email protected] enabled enabled
avahi-daemon.service enabled enabled
binfmt-support.service enabled enabled
bluetooth.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
dbus-fi.w1.wpa_supplicant1.service enabled enabled
¿Te das cuenta del ajuste preestablecido del proveedor? También estuvo presente en el ejemplo anterior.
El preajuste del proveedor define el comportamiento automático de la unidad systemd cuando se instala un programa.
Suponga que instaló un nuevo programa XYZ. Este XYZ tiene un servicio systemd llamado xyz.service con preajuste de proveedor habilitado. Esto significa que después de instalar el programa, cuando inicie el sistema, este servicio xyz se activará automáticamente en el momento del inicio.
Si el preajuste del proveedor está deshabilitado, deberá configurarlo manualmente para habilitarlo. Una vez que está habilitado, se inicia automáticamente cada arranque.
sudo systemd enable xyz.service
Mostrar el estado de un particular systemd service
Hasta ahora, ha visto varias formas de enumerar servicios. Pero nada se centra en un solo servicio.
Puede obtener información detallada sobre un servicio systemd utilizando el status
subcomando de systemctl. La finalización de pestañas funciona con este comando.
systemctl status <service_name>
Aquí hay un ejemplo con el servicio de administrador de red:
[email protected]:~$ systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
Docs: man:NetworkManager(8)
Main PID: 711 (NetworkManager)
Tasks: 3 (limit: 9157)
Memory: 13.6M
CGroup: /system.slice/NetworkManager.service
└─711 /usr/sbin/NetworkManager --no-daemon
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info> [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info> [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info> [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info> [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL
Puede ver que proporciona mucha información útil como el estado del servicio, la página del manual del servicio, la memoria que consume, la identificación del proceso, etc. También muestra los últimos registros del servicio.
Si desea verificar si un servicio está activo o no en un script de shell, puede usar is-active
subcomando. La salida es 0 para activo.
systemctl is-active application.service
De manera similar, si desea verificar si un servicio está habilitado (configurado para iniciarse automáticamente en el momento del arranque), puede usar is-enabled
subcomando. La salida es 0 para el servicio habilitado.
systemctl is-enabled application.service
Conclusión
Creo que ahora tiene una mejor comprensión de la lista de servicios systemd. Espero que hayas aprendido algunas cosas nuevas sobre systemd y el comando systemctl.
No dude en enviar sus comentarios, preguntas o sugerencias en la sección de comentarios.