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.