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.