El gestor de sistemas y servicios por defecto de la mayoría de las distribuciones Linux es ahora systemd
.
El proceso systemd
sustituye al SysV init
. Se ejecuta como el primer proceso tras el arranque del núcleo y es responsable de llevar el host Linux al estado en el que puede ser utilizado. Es responsable de iniciar y gestionar los servicios, montar sistemas de archivos, gestionar el hardware, generar el prompt de inicio de sesión y mucho más.
Un beneficio clave sobre SysV es que systemd inicia tantos servicios como sea posible en paralelo, acelerando así el proceso de arranque, y eso hace que aparezca la pantalla de inicio de sesión más rápidamente.
Unidades
Los elementos gestionados por systemd se denominan unidades. Los archivos de las unidades se encuentran en /lib/systemd/system
.
Unidades de servicio
Para la gestión de servicios, las unidades objetivo son las unidades de servicio, que tienen archivos de unidad con el sufijo .service.
Gestión de los servicios systemd
El comando para gestionar las unidades systemd es systemctl
.
Iniciar y detener servicios
Para iniciar un servicio systemd, utilice el comando systemctl start:
$ sudo systemctl start nombre.servicio
Puede dejar el sufijo .service. Por ejemplo, para iniciar el servidor apache en Ubuntu:
$ sudo systemctl start apache2
Para detener un servicio en ejecución:
$ sudo systemctl stop nombre.servicio
Así, para detener el servidor apache en Ubuntu
$ sudo systemctl stop apache2
Reinicio y recarga de servicios
Para reiniciar un servicio en ejecución, utilice el comando restart:
$ sudo systemctl restart nombre.servicio
Y para recargar únicamente el archivo de configuración
$ sudo systemctl reload nombre.servicio
Activación y desactivación de servicios
Si desea que un servicio se inicie automáticamente al arrancar el sistema, utilice el comando enable:
$ sudo systemctl enable nombre.servicio
Para deshabilitar un servicio para que no se inicie al arrancar el sistema:
$ sudo systemctl disable nombre.servicio
La desactivación no detiene un servicio en ejecución.
Visualización del estado del servicio
Para ver información sobre un servicio:
$ sudo systemctl status nombre.servicio
Esto le mostrará el estado del servicio y las primeras líneas del archivo de registro. Así, mientras el servicio está en ejecución es, la salida de
sudo systemctl status apache2
es
apache2.service - El servidor HTTP Apache
Cargado: cargado (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Cargado /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Activo: active (running) since Tue 2020-05-19 22:11:36 UTC; hace 4 días
Proceso: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
PID principal: 104165 (apache2)
Tareas: 55 (límite: 1024)
Grupo C /system.slice/apache2.service
├─104165 /usr/sbin/apache2 -k start
├─116006 /usr/sbin/apache2 -k start
└─116007 /usr/sbin/apache2 -k start
19 de mayo 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Iniciando el servidor HTTP Apache...
19 de mayo 22:11:36 ubuntu18 systemd<x><x><x><x>[</x></x></x></x>1]: Iniciado El Servidor HTTP Apache.
21 de mayo 06:25:01 ubuntu18 systemd<x><x><x><x>[</x></x></x></x>1]: Recargando El Servidor HTTP Apache.
21 de mayo 06:25:01 ubuntu18 systemd<x><x><x><x>[</x></x></x></x>1]: Recargado El Servidor HTTP Apache.
22 de mayo 06:25:01 ubuntu18 systemd<x><x><x><x>[</x></x></x></x>1]: Recargado El Servidor HTTP Apache.
Para comprobar si un servicio está activo:
$ sudo systemctl is-active nombre.servicio
Así, mientras el servicio apache2 está en ejecución, la salida del comando systemctl is-active es :
$ sudo systemctl is-active apache2
activo
Para comprobar si un servicio está activado
$ sudo systemctl is-enabled nombre.servicio.
Visualización del estado del sistema
Todos los comandos que ha visto hasta ahora se utilizan para gestionar un único servicio. Cuando desee una visión general del estado del sistema, utilice el siguiente conjunto de comandos:
Para ver todos los tipos de unidades
$ sudo systemctl -t help
Tipos de unidad disponibles:
servicio
socket
objetivo
dispositivo
montar
automount
swap
temporizador
ruta
corte
ámbito
Para listar todas las unidades instaladas, utilice list-unit-files
$ sudo systemctl list-unit-files
ESTADO DEL ARCHIVO DE UNIDAD
proc-sys-fs-binfmt_misc.automount estático
-.mount generado
boot-efi.mount generado
dev-hugepages.mount estático
dev-mqueue.mount estático
mnt.mount generado
proc-sys-fs-binfmt_misc.mount estático
sys-fs-fuse-connections.mount estático
sys-kernel-config.mount estático
sys-kernel-debug.mount estático
acpid.path habilitado
apport-autoreport.path habilitado
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-161.scope transient
accounts-daemon.service habilitado
La salida sólo tiene dos columnas Archivo de unidad y Estado. El estado será normalmente habilitado, deshabilitado, estático o enmascarado.
- Estático: Esto significa que la unidad no puede habilitarse, realiza una acción puntual o es una dependencia de otra unidad y no puede ejecutarse por sí misma.
- Enmascarada: Una unidad listada como enmascarada significa que es completamente inarrancable, ya que está vinculada a /dev/null. Esto se denomina enmascarar la unidad. Esto impide que el servicio se inicie, manual o automáticamente.
Listar todos los servicios instalados
El comando systemctl list-unit-files con el filtro -t o -type service sólo muestra el estado de los servicios instalados.
$ sudo systemctl list-unit-files -t service
ESTADO DEL ARCHIVO DE UNIDAD
accounts-daemon.service habilitado
acpid.service desactivado
apache-htcacheclean.service desactivado
apache-htcacheclean@.service deshabilitado
apache2.service habilitado
apache2@.service desactivado
apparmor.service habilitado
apport-autoreport.service estático
apport-forward@.service estático
apport.service generado
apt-daily-upgrade.service estático
apt-daily.service estático
atd.service habilitado
autovt@.service habilitado
blk-availability.service habilitado
bootlogd.service enmascarado
bootlogs.service enmascarado
Para ver todas las unidades de servicio activas, utilice list-units con el filtro -t service
$ sudo systemctl list-units -t service
UNIDAD CARGADA ACTIVA SUB DESCRIPCIÓN
accounts-daemon.service cargado activo en ejecución Servicio de cuentas
apache2.service loaded active en ejecución El servidor HTTP Apache
apparmor.service loaded active exited Inicialización de AppArmor
apport.service loaded active exited LSB: generación automática de informes de fallos
atd.service cargado activo en ejecución Programador de ejecución diferida
blk-availability.service loaded active exited Disponibilidad de dispositivos de bloque
cloud-config.service loaded active exited Aplicar la configuración especificada en cloud-con
cloud-final.service loaded active exited Ejecutar los scripts de usuario/final de la nube
cloud-init-local.service loaded active exited Trabajo inicial de cloud-init (pre-networking)
cloud-init.service loaded active exited Trabajo inicial cloud-init (servicio de metadatos
console-setup.service loaded active exited Configurar la fuente de la consola y el mapa de teclas
cron.service cargado activo en ejecución Programa regular en segundo plano procesando dae
La salida tiene las siguientes columnas :
- UNIT: El nombre de la unidad de servicio systemd
- LOAD: Muestra si la definición de la unidad se ha leído y cargado correctamente
- ACTIVE: Describe si la unidad está activa.
- SUB: Estado de activación de bajo nivel de la unidad, que ofrece información más detallada sobre la unidad. Esto variará según el tipo de unidad.
- DESCRIPCIÓN: La descripción de la unidad de servicio.
Conclusión
Espero que esto le de una idea sobre el uso de systemctl para gestionar servicios en Linux. Si está interesado en aprender más, puede consultar este curso de Dominio de Linux.