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é la salida 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
sistemaLos servicios son gestionados por elsystemctl
mando. Si tu corressystemctl
sin ningún argumento, invoca el valor predeterminadolist-units
subcomando y enumera varios tipos de unidades systemd como servicios, sockets, objetivos, etc.
Pero su objetivo es enumerar los servicios para que especifique el tipo de unidad con--type
bandera así:
systemctl --type=service
¿Notaste que no especifiqué ellist-units
subcomando porque es el predeterminado? Si desea seguir la convención, también puede especificarlo. Lo prefiero de esta manera y seguiré esta convención en el resto del tutorial.
systemctl list-units --type=service
En ambos casos la salida será la misma. Por defecto, esteel comando muestra solo los servicios cargados y activosen 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 la salida:
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 con éxito).
Enumere todos los servicios systemd en ejecución
El estado activo también puede tener un subestado como en ejecución, salido, etc. Puede usar el mismo--state
bandera con el subestado.
Para enumerar los servicios de systemd en ejecución, use el--state=running
bandera 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
Enumere 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, utilice el--all
bandera:
systemctl list-units --all --type=service
Ahora puede 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
Listar todos los servicios systemd inactivos
Si desea ver solo los servicios inactivos, puede combinar varias banderas como--all
y--state
Me gusta esto:
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
Enumere 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ías 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 ello en el futuro.
Enumere todos los servicios 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 de 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 la anterior example.
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 servicio systemd en particular
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 elstatus
subcomando de systemctl. La finalización de pestañas funciona con este comando.
systemctl status <service_name>
Aquí hay un example 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 elis-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 usaris-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.