Saltar a contenido

Gestión de servicios en systemd

En este artículo

systemd es el sistema init estándar y el gestor de servicios en la mayoría de las distribuciones modernas de Linux:

  • Ubuntu 16.04+ (Ubuntu 20.04/22.04/24.04 muy recomendado)
  • Debian 8+ (Debian 11/12 – versiones LTS actuales)
  • RHEL/CentOS 7+ (RHEL 9 / AlmaLinux/Rocky Linux 9 – sustitutos modernos de CentOS)
  • Fedora, openSUSE, Arch y otras

Tras el arranque del kernel, este cede el control a systemd (PID 1), que se encarga de:

  • iniciar y detener servicios,
  • montar sistemas de archivos,
  • configurar la red y el entorno,
  • gestionar las dependencias entre componentes.

La interfaz principal para interactuar con systemd es la utilidad systemctl.

Sintaxis básica

systemctl [opciones] comando [servicio]

Nota

En la mayoría de los casos, el uso de systemctl requiere privilegios de superusuario: utilice sudo.

Visualización del estado del servicio

Tarea Comando
Listar unidades activas (servicios, sockets, temporizadores, etc.) systemctl list-units
Solo servicios en ejecución systemctl list-units --type=service
Todos los servicios (incluidos los detenidos e inactivos) systemctl list-units --type=service --all
Listar servicios en ejecución systemctl list-units --type=service --state=running
Buscar un servicio específico (p. ej., nginx) systemctl list-units '*nginx*'
Información detallada sobre un servicio systemctl status nginx (con registros, PID, dependencias)

Nota

Añada --no-pager para evitar que la salida se divida en páginas (p. ej., systemctl status nginx --no-pager).

Gestión del funcionamiento del servicio

Utilizaremos nginx como ejemplo, pero los comandos se aplican a cualquier servicio: sshd, postgresql, clamav-daemon, docker, etc.

Acción Comando Nota
Comprobar estado sudo systemctl status nginx Muestra si está en ejecución, su PID, registros recientes y errores
Iniciar sudo systemctl start nginx Inicia el servicio hasta el siguiente reinicio
Detener sudo systemctl stop nginx
Reiniciar sudo systemctl restart nginx Detención completa > inicio (si no está en ejecución, lo iniciará)
Recargar configuración sin detener sudo systemctl reload nginx Funciona si el servicio admite SIGHUP (nginx, Apache, Postfix, etc.)
Recargar o reiniciar sudo systemctl reload-or-restart nginx Recurre a restart si reload no está soportado
Intentar reiniciar (solo si está en ejecución) sudo systemctl try-restart nginx Seguro para scripts
Comprobar si el servicio está activo systemctl is-active nginx Salida: active / inactive / unknown
Comprobar si el servicio ha fallado systemctl is-failed nginx Salida: failed si el servicio terminó con un error

Nota

Tras start/restart, el servicio no se iniciará automáticamente al reiniciar: el inicio automático requiere una configuración separada.

Gestión del inicio automático

Acción Comando Qué ocurre
Habilitar inicio automático sudo systemctl enable nginx Crea un enlace simbólico desde /usr/lib/systemd/system/nginx.service a /etc/systemd/system/multi-user.target.wants/
Deshabilitar inicio automático sudo systemctl disable nginx Elimina el enlace simbólico pero no detiene el proceso en ejecución
Comprobar estado del inicio automático systemctl is-enabled nginx Valores posibles: enabled, disabled, static, masked
Restablecer configuración > volver a habilitar sudo systemctl reenable nginx Borra las anulaciones anteriores y vuelve a habilitar el servicio
Restablecer a valores predeterminados sudo systemctl preset nginx Revierte cualquier configuración personalizada a la predeterminada de la distribución (rara vez se usa)

Funcionalidades avanzadas

1. Forzar la recarga de la configuración de systemd

Si ha editado un archivo .service:

sudo systemctl daemon-reload
sudo systemctl restart nginx

2. Visualización de dependencias

systemctl list-dependencies nginx

3. Registro del servicio (vía journalctl)

journalctl -u nginx

4. Enmascarar un servicio (deshabilitación completa, incluso manualmente)

sudo systemctl mask nginx
sudo systemctl unmask nginx

Comandos útiles para el uso diario

# Comprobar rápidamente si el servicio está habilitado y en ejecución
systemctl is-active --quiet nginx && echo "OK" || echo "STOPPED"


# Iniciar y habilitar el inicio automático con un solo comando
sudo systemctl start nginx && sudo systemctl enable nginx


# Deshabilitar y detener el servicio
sudo systemctl stop nginx && sudo systemctl disable nginx

Nota

La opción --now (disponible desde systemd v220+, 2015) realiza enable + start o disable + stop simultáneamente.

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×