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¶
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:
2. Visualización de dependencias¶
3. Registro del servicio (vía journalctl)¶
4. Enmascarar un servicio (deshabilitación completa, incluso manualmente)¶
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.