Cómo administrar los servicios de Systemd con Systemctl en Linux
Systemd es un proceso estándar para administrar los servicios de inicio en los sistemas operativos Linux. Se utiliza para controlar qué programas se ejecutan cuando se inicia el sistema Linux. Es un administrador de sistemas y se ha convertido en el nuevo estándar para los sistemas operativos Linux. Systemd le permite crear un servicio systemd personalizado para ejecutar y administrar cualquier proceso. En este tutorial, explicaremos cómo administrar servicios con systemd en Linux utilizando el comando systemctl, que es la herramienta central para gestionar la configuración y el funcionamiento de org.freedesktop.systemd1.manage-units.
Requisitos previos
- Un servidor que ejecuta Linux con Systemd, usaré el servidor Ubuntu 20.04 aquí.
- Se configura una contraseña de root en el servidor.
Verificar Systemd
De forma predeterminada, Systemd viene preinstalado en todos los principales sistemas operativos Linux. Puede verificar la versión instalada de Systemd con el siguiente comando:
systemctl --version
Debería ver el siguiente resultado:
systemd 245 (245.4-4ubuntu3) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
Puede encontrar la ubicación de Systemd con el siguiente comando:
whereis systemd
Deberías obtener el siguiente resultado:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Para encontrar la ubicación de systemctl, ejecute el siguiente comando:
whereis systemctl
Deberías obtener el siguiente resultado:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
También puede verificar si Systemd se está ejecutando o no con el siguiente comando:
ps -eaf | grep systemd
Deberías obtener el siguiente resultado:
root 269 1 0 09:57 ? 00:00:01 /lib/systemd/systemd-journald root 294 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-udevd systemd+ 297 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-networkd message+ 319 1 0 09:57 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only root 329 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-logind systemd+ 382 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-resolved root 1128 1 0 10:47 ? 00:00:00 /lib/systemd/systemd --user root 1177 1152 0 10:48 pts/0 00:00:00 grep --color=auto systemd
Para analizar el tiempo que tarda cada proceso en el arranque del sistema con el siguiente comando:
systemd-analyze blame
Deberías obtener el siguiente resultado:
3.662s csm.service 1.899s apt-daily-upgrade.service 1.798s dev-sda1.device 1.400s systemd-logind.service 1.336s fstrim.service 1.207s systemd-networkd.service 1.131s systemd-resolved.service 856ms man-db.service 842ms systemd-journald.service 415ms e2scrub_reap.service 320ms keyboard-setup.service 295ms networkd-dispatcher.service 239ms systemd-udev-trigger.service
Para analizar la cadena crítica en el arranque con el siguiente comando:
systemd-analyze critical-chain
Deberías obtener el siguiente resultado:
The time when unit became active or started is printed after the "@" character. The time the unit took to start is printed after the "+" character. graphical.target @4.948s ??multi-user.target @4.946s ??csm.service @1.282s +3.662s ??basic.target @1.277s ??sockets.target @1.276s ??dbus.socket @1.274s ??sysinit.target @1.257s ??systemd-update-utmp.service @1.247s +8ms ??systemd-tmpfiles-setup.service @1.228s +17ms ??systemd-journal-flush.service @1.201s +24ms ??systemd-journald.service @356ms +842ms ??systemd-journald.socket @313ms ??system.slice @225ms ??-.slice @225ms
Administrar servicios con Systemd
Systemctl proporciona una forma más fácil de administrar los servicios de systemd. A continuación, se describen algunas operaciones comunes para la administración de servicios, incluyendo cómo enable service systemctl.
Para iniciar el servicio Apache, ejecute el siguiente comando:
systemctl start apache2
Para reiniciar el servicio de Apache, ejecute el siguiente comando:
systemctl restart apache2
Para detener el servicio de Apache, ejecute el siguiente comando:
systemctl stop apache2
Para recargar el servicio de Apache, ejecute el siguiente comando:
systemctl reload apache2
Para permitir que el servicio Apache se inicie después de reiniciar el sistema, ejecute el siguiente comando:
systemctl enable apache2
Para eliminar el servicio Apache del inicio del sistema, ejecute el siguiente comando:
systemctl disable apache2
Para eliminar el servicio de Apache, ejecute el siguiente comando:
systemctl kill apache2
Para enmascarar el servicio de Apache, ejecute el siguiente comando:
systemctl mask apache2
Para desenmascarar el proceso de Apache, ejecute el siguiente comando:
systemctl unmask apache2
Para verificar si el servicio Apache está habilitado o no, ejecute el siguiente comando:
systemctl is-enabled apache2
Para verificar el estado del servicio Apache, ejecute el siguiente comando:
systemctl status apache2
Si el servicio se está ejecutando, debería obtener el siguiente resultado:
? apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-01-09 10:53:12 UTC; 26s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 1708 (apache2) Tasks: 55 (limit: 2353) Memory: 5.8M CGroup: /system.slice/apache2.service ??1708 /usr/sbin/apache2 -k start ??1709 /usr/sbin/apache2 -k start ??1710 /usr/sbin/apache2 -k start Jan 09 10:53:12 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...
Después de cambiar el nombre o eliminar cualquier archivo systemd, deberá volver a cargarlo para aplicar los cambios. Para volver a cargar el archivo de servicio systemd, ejecute el siguiente comando:
systemctl daemon-reload
Administrar archivos de unidades de Systemd
Los comandos anteriores serán útiles para administrar servicios individuales. Sin embargo, no se puede utilizar para encontrar el estado actual del sistema. Existen muchos otros comandos que son útiles para proporcionar esta información, como se verá a continuación.
Para ver una lista de todas las unidades disponibles, ejecute el siguiente comando:
systemctl list-unit-files
Debería ver una lista de todos los archivos de la unidad en el siguiente resultado:
UNIT FILE STATE VENDOR PRESET proc-sys-fs-binfmt_misc.automount static enabled -.mount generated enabled dev-hugepages.mount static enabled dev-mqueue.mount static enabled proc-sys-fs-binfmt_misc.mount disabled enabled sys-fs-fuse-connections.mount static enabled sys-kernel-config.mount static enabled sys-kernel-debug.mount static enabled sys-kernel-tracing.mount static enabled acpid.path enabled enabled ntp-systemd-netif.path enabled enabled systemd-ask-password-console.path static enabled systemd-ask-password-wall.path static enabled session-2.scope transient enabled acpid.service disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled
Para ver una lista de todas las unidades activas, ejecute el siguiente comando:
systemctl list-units
Debería ver el siguiente resultado:
UNIT LOAD ACTIVE SUB DESCRIPTION > proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable Fil> sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged QEMU_HARDDISK 1 > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged QEMU_HARDDISK > sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS10.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS11.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS12.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS13.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS14.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS15.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS16.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS17.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS18.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS19.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS20.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS21.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS22.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS23.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS24.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS25.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS26.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS27.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS28.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS29.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS30.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS31.device loaded active plugged /sys/devices/platform/se>
Para ver una lista de todas las unidades fallidas, ejecute el siguiente comando:
systemctl --failed
Para enumerar todos los servicios, incluidos los servicios habilitados y deshabilitados, ejecute el siguiente comando:
systemctl list-unit-files --type=service
Debería ver el siguiente resultado:
UNIT FILE STATE VENDOR PRESET acpid.service disabled enabled apache-htcacheclean.service disabled enabled [email protected] disabled enabled apache2.service enabled enabled [email protected] disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled dbus-org.freedesktop.login1.service static enabled dbus-org.freedesktop.resolve1.service enabled enabled dbus-org.freedesktop.timedate1.service static enabled dbus-org.freedesktop.timesync1.service masked enabled dbus.service static enabled debug-shell.service disabled disabled dmesg.service enabled enabled [email protected] static enabled e2scrub_all.service static enabled [email protected] static enabled e2scrub_reap.service enabled enabled emergency.service static enabled fstrim.service static enabled getty-static.service static enabled [email protected] enabled enabled
Puede ver las propiedades de la unidad SSH, ejecute el siguiente comando:
systemctl show sshd.service
Debería ver el siguiente resultado:
Id=sshd.service Names=sshd.service Requires=basic.target Wants=system.slice WantedBy=multi-user.target Conflicts=shutdown.target Before=shutdown.target multi-user.target After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice Description=OpenSSH server daemon
Administrar sockets con Systemctl
También puede administrar los sockets mediante el comando systemctl. Esto incluye el manejo de sockets para servicios como SSH, que utilizan la interfaz system ctl para su gestión.
Para enumerar todos los sockets del sistema disponibles, ejecute el siguiente comando:
systemctl list-unit-files --type=socket
Debería ver el siguiente resultado:
UNIT FILE