Cómo enumerar los servicios de Systemd en Linux

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

sistema Los servicios son gestionados por el systemctl mando. Si tu corres systemctl sin ningún argumento, invoca el valor predeterminado list-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é el list-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, este el 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 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 el status 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 el 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.

Related Posts