¿Cómo ver los servicios habilitados y en ejecución en Linux usando systemctl?

0
1208

Systemd y el comando systemctl juegan un papel vital en la mayoría de los sistemas Linux actuales. Esta publicación explica los comandos para analizar algunos aspectos de su funcionamiento.
La gran mayoría de los sistemas Linux en estos días usan  systemd , un conjunto de programas destinados a administrar e interconectar diferentes partes del sistema.

Systemd comenzó a reemplazar el proceso de init en 2014 y ahora es el primer proceso que se inicia cuando la mayoría de los sistemas Linux arrancan. Para echar un vistazo rápido, puede ejecutar el comando que verifica que el proceso 1 sea realmente systemd . En este sistema, también se están ejecutando dos procesos systemd adicionales .

$ ps -C systemd
    PID TTY          TIME CMD
      1 ?        00:00:59 systemd	<===
   1244 ?        00:00:00 systemd
  54429 ?        00:00:00 systemd

Para ver un poco más de detalle, pruebe el siguiente comando. El espacio en blanco entre las comillas está destinado a evitar que los procesos relacionados como systemd-journald aparezcan en la lista.

$ ps -ef | grep "systemd " | grep -v grep
root    1   0 0 Jul17 ?    00:00:59 /usr/lib/systemd/systemd --system --deserialize 30
gdm  1244   1 0 Jul17 ?    00:00:00 /usr/lib/systemd/systemd --user
shs  5429   1 0 Jul19 ?    00:00:00 /usr/lib/systemd/systemd --user

El primer proceso listado (con –system ) es el proceso systemd primario . El segundo y el tercero son la gestión de sesiones de usuario ( –usuario ). En este caso, uno está asociado con el administrador de pantalla GNOME ( gdm ) y el otro con un usuario que ha iniciado sesión.

Aqui, si observa todos los procesos systemd en ejecución, es probable que los vea. Cada uno juega un papel en la gestión de los servicios del sistema. Por ejemplo, system-journald recopila y almacena datos de registro.

/usr/lib/systemd/systemd
/usr/lib/systemd/systemd-journald
/usr/lib/systemd/systemd-udevd
/usr/lib/systemd/systemd-oomd
/usr/lib/systemd/systemd-resolved
/usr/lib/systemd/systemd-homed
/usr/lib/systemd/systemd-machined
/usr/lib/systemd/systemd-logind
/usr/lib/systemd/systemd-userdbd
/usr/lib/systemd/systemd
systemd-userwork

Para ver o controlar los  servicios de systemd , use el comando systemctl . Puede ver los procesos en ejecución con un comando como este:

$ systemctl | head -1; systemctl | grep running | head -11
 UNIT                               LOAD   ACTIVE SUB       DESCRIPTION
 proc-sys-fs-binfmt_misc.automount  loaded active running   Arbitrary Executable File Formats File System
 cups.path                          loaded active running   CUPS Scheduler
 init.scope                         loaded active running   System and Service Manager
 session-13.scope                   loaded active running   Session 13 of User shs
 session-6.scope                    loaded active running   Session 6 of User shs
 session-c1.scope                   loaded active running   Session c1 of User gdm
 abrt-journal-core.service          loaded active running   Creates ABRT problems from coredumpctl messages
 abrt-oops.service                  loaded active running   ABRT kernel log watcher
 abrt-xorg.service                  loaded active running   ABRT Xorg log watcher
 abrtd.service                      loaded active running   ABRT Automated Bug Reporting Tool
 accounts-daemon.service            loaded active running   Accounts Service

Agregué el  systemctl | head -1 en el comando anterior para proporcionar encabezados de columna.

Para systemd , la palabra “UNIDAD” se refiere a cualquier recurso que el sistema sabe cómo operar y administrar. Para enumerar los que están habilitados, puede usar un comando como este:

$ systemctl list-unit-files --state=enabled | head -15
UNIT FILE                          STATE   VENDOR PRESET
cups.path                          enabled enabled
abrt-journal-core.service          enabled enabled
abrt-oops.service                  enabled enabled
abrt-vmcore.service                enabled enabled
abrt-xorg.service                  enabled enabled
abrtd.service                      enabled enabled
accounts-daemon.service            enabled enabled
atd.service                        enabled enabled
auditd.service                     enabled enabled
avahi-daemon.service               enabled enabled
bluetooth.service                  enabled enabled
chronyd.service                    enabled enabled
crond.service                      enabled enabled
cups.service                       enabled disabled

Tenga en cuenta que “habilitado” no significa que se esté ejecutando un servicio. Y “en ejecución” no significa necesariamente que esté habilitado. Cada uno significa algo diferente. “Habilitado” significa que el sistema ejecutará el servicio en el próximo arranque (ya sea que se esté ejecutando ahora o no). Una vez que habilita un servicio, aún debe iniciarlo manualmente si desea que se ejecute de inmediato, o puede reiniciar el sistema y se iniciará automáticamente.

El estado “en ejecución” significa que el proceso se está ejecutando realmente. Si no está también habilitado, no se reiniciará cuando reinicie.

En los siguientes comandos, podemos ver que el servicio web está habilitado y en ejecución:

$ systemctl list-unit-files | head -1; systemctl list-unit-files | grep http
UNIT FILE                        STATE           VENDOR PRESET
httpd.service                    enabled         disabled  <== enabled
httpd@.service                   disabled        disabled
httpd.socket                     disabled        disabled

$ systemctl | grep running | grep http
  httpd.service     loaded active running   The Apache HTTP Server <== running

Puede ver mucha más información relacionada con este servicio preguntando por su estado:

$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2021-07-17 18:21:44 EDT; 1 week 1 day ago
       Docs: man:httpd.service(8)
   Main PID: 876 (httpd)
     Status: "Total requests: 154; Idle/Busy workers 100/0;Requests/sec: 0.000204; Bytes served/sec:   0 B/sec"
      Tasks: 213 (limit: 7072)
     Memory: 20.3M
        CPU: 1min 58.761s
     CGroup: /system.slice/httpd.service
             ├─   876 /usr/sbin/httpd -DFOREGROUND
             ├─394234 /usr/sbin/httpd -DFOREGROUND
             ├─394235 /usr/sbin/httpd -DFOREGROUND
             ├─394236 /usr/sbin/httpd -DFOREGROUND
             └─394237 /usr/sbin/httpd -DFOREGROUND

Jul 25 00:00:07 dragonfly systemd[1]: Reloaded The Apache HTTP Server.
Jul 25 00:00:08 dragonfly httpd[876]: Server configured, listening on: port 80

Alternativamente, puede simplemente determinar si un servicio en particular está activo y/o habilitado con comandos como estos:

$ systemctl is-active httpd.service
Active
$ systemctl is-enabled httpd.service
Enabled

El comando systemctl proporciona diferentes detalles sobre los procesos del sistema que el comando ps . Donde ps solo enumera los procesos que se están  ejecutando, systemctl enumera qué servicios son conocidos, cuáles pueden ser administrados por systemd y si los servicios están habilitados.