Systemd: servicios con systemctl

Introducción

Systemd es el sistema de inicio (init system) estándar en la mayoría de distribuciones Linux modernas (Debian, Ubuntu, Fedora, RHEL, Arch…). Reemplaza al antiguo SysVinit y gestiona el arranque del sistema, los servicios (demonios), los puntos de montaje, los temporizadores y mucho más. El comando principal para interactuar con systemd es systemctl.

Consultar el estado de un servicio


$ systemctl status nginx
$ systemctl status sshd
          

La salida muestra si el servicio está activo, su PID, los últimos logs y si está habilitado al arranque.


● nginx.service - A high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
     Active: active (running) since Mon 2025-01-01 10:00:00 UTC; 2h ago
    Process: 1234 ExecStart=/usr/sbin/nginx
   Main PID: 1234 (nginx)
          

Iniciar, detener y reiniciar servicios


# systemctl start nginx       # iniciar el servicio
# systemctl stop nginx        # detener el servicio
# systemctl restart nginx     # detener y volver a iniciar
# systemctl reload nginx      # recargar configuración sin detener
# systemctl reload-or-restart nginx  # recarga si puede, reinicia si no
          
  • restart → para el proceso y lo vuelve a arrancar. Hay un breve momento de inactividad
  • reload → el proceso sigue corriendo pero relee su configuración (no todos los servicios lo soportan)

Habilitar y deshabilitar en el arranque

Habilitar un servicio significa que se iniciará automáticamente al arrancar el sistema. Deshabilitarlo evita que arranque solo.


# systemctl enable nginx      # habilitar en el arranque
# systemctl disable nginx     # deshabilitar en el arranque
# systemctl enable --now nginx   # habilitar Y arrancar ahora
# systemctl disable --now nginx  # deshabilitar Y parar ahora
          

enable crea un enlace simbólico en el directorio de targets adecuado. disable lo elimina.

Enmascarar un servicio

mask impide que el servicio pueda iniciarse de cualquier forma, incluso manualmente. Es más restrictivo que disable.


# systemctl mask bluetooth     # impide cualquier arranque
# systemctl unmask bluetooth   # quita la máscara
          

Listar servicios y unidades


$ systemctl list-units --type=service          # servicios activos
$ systemctl list-units --type=service --all    # todos (incluidos inactivos)
$ systemctl list-unit-files --type=service     # estado de habilitación
$ systemctl is-active nginx                    # devuelve active o inactive
$ systemctl is-enabled nginx                   # devuelve enabled o disabled
$ systemctl is-failed nginx                    # devuelve failed si falló
          

daemon-reload

Cuando modificas o creas archivos de unidad (.service) debes recargar la configuración de systemd antes de que los cambios surtan efecto.


# systemctl daemon-reload
          

systemctl es la herramienta central para gestionar todos los servicios del sistema con systemd.

Systemd: Targets (multi-user.target, graphical.target)

Índice de la sección

Índice del curso