Rack de servidores Linux gestionados con Systemd

Systemd explicado: gestiona servicios en Linux como un pro

Si administras servidores Linux y necesitas gestionar servicios con Systemd, estás en el lugar correcto. Systemd es el gestor de servicios estándar en prácticamente todas las distribuciones modernas — Ubuntu, Debian, CentOS, RHEL — y una vez lo entiendes no quieres volver atrás al viejo service nginx start.

¿Qué es Systemd y por qué gestionar servicios Linux con él?

Systemd es el sistema de inicio (PID 1) de Linux. Se encarga de arrancar el sistema, gestionar los servicios (daemons), montar sistemas de archivos y centralizar los logs. Sustituyó a SysVinit en la mayoría de distros a partir de 2015. La herramienta principal para interactuar con Systemd es systemctl. Puedes consultar la documentación oficial de Systemd para más detalle.

Comandos esenciales para gestionar servicios con Systemd

Iniciar, detener y reiniciar servicios Linux

# Iniciar, detener y reiniciar
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# Recargar configuración sin reiniciar
sudo systemctl reload nginx

# Reiniciar solo si ya estaba corriendo
sudo systemctl reload-or-restart nginx

Ver el estado de un servicio en Systemd

# Estado detallado con logs recientes
sudo systemctl status nginx

# Comprobar si está activo (útil en scripts)
systemctl is-active nginx

# Comprobar si arranca con el sistema
systemctl is-enabled nginx

Aprende a leer bien el output de systemctl status — muestra PID, tiempo de arranque, memoria, últimas líneas de log y estado. Es tu mejor aliado cuando algo falla. Si el servicio falla al arrancar, te recomiendo ver el post de SSH sin contraseña para entender cómo conectarte al servidor y depurarlo.

Habilitar servicios Linux en el arranque con Systemd

# Habilitar y arrancar a la vez (lo uso siempre)
sudo systemctl enable --now nginx

# Deshabilitar y detener a la vez
sudo systemctl disable --now nginx

Listar y filtrar servicios

# Todos los servicios
systemctl list-units --type=service

# Solo los que están fallando
systemctl list-units --type=service --state=failed

# Los habilitados para el arranque
systemctl list-unit-files --type=service --state=enabled

Crear un servicio personalizado en Systemd

Esta es la parte más potente de Systemd para gestionar servicios Linux propios. Puedes convertir cualquier script o aplicación en un servicio con arranque automático y reinicio ante fallos. Los unit files van en /etc/systemd/system/. Ejemplo para una app Node.js:

# /etc/systemd/system/mi-app.service

[Unit]
Description=Mi aplicación Node.js
After=network.target

[Service]
Type=simple
User=victor
WorkingDirectory=/home/victor/mi-app
ExecStart=/usr/bin/node /home/victor/mi-app/index.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production
Environment=PORT=3000

[Install]
WantedBy=multi-user.target
# Recargar Systemd y arrancar el servicio
sudo systemctl daemon-reload
sudo systemctl enable --now mi-app
sudo systemctl status mi-app

Opciones más importantes del unit file de Systemd

OpciónValoresQué hace
Restartno, on-failure, alwaysCuándo reiniciar el servicio
RestartSec5, 10, 30Segundos antes de reiniciar
Afternetwork.target, postgresql.serviceArrancar después de
Usernombre usuarioUsuario que ejecuta el servicio
EnvironmentFile/etc/mi-app.envVariables desde un archivo

Ver logs de servicios Systemd con journalctl

Systemd incluye su propio sistema de logs llamado journald. Es fundamental para depurar servicios Linux que no arrancan. La herramienta es journalctl:

# Seguir logs en tiempo real
journalctl -u nginx -f

# Últimas 50 líneas
journalctl -u nginx -n 50

# Logs de las últimas 2 horas
journalctl -u nginx --since "2 hours ago"

# Solo errores
journalctl -u nginx -p err

Si tu servicio falla con errores de permisos, revisa también el post sobre permisos en Linux con chmod y chown — suele ser la causa más habitual.

Análisis del arranque del sistema con Systemd

# Ver cuánto tarda en arrancar el sistema
systemd-analyze

# Ver qué servicios tardan más en arrancar
systemd-analyze blame

# Ver el árbol de dependencias de un servicio
systemctl list-dependencies nginx

Referencia rápida: gestionar servicios Linux con Systemd

Comando SystemdQué hace
systemctl start/stop/restart servicioGestiona el estado del servicio
systemctl status servicioEstado detallado con logs recientes
systemctl enable --now servicioHabilita y arranca el servicio
systemctl disable --now servicioDeshabilita y detiene el servicio
systemctl daemon-reloadRecarga los unit files
journalctl -u servicio -fSigue los logs en tiempo real
systemd-analyze blameQué servicios tardan más en arrancar

Conclusión

Gestionar servicios Linux con Systemd parece complejo al principio pero una vez entiendes el patrón — unit files, systemctl, journalctl — se vuelve muy intuitivo. Crear servicios personalizados para tus aplicaciones es una de las mejores inversiones de tiempo en cualquier servidor de producción.

En el próximo post veremos el troubleshooting de Systemd — qué hacer cuando un servicio no arranca y cómo interpretar los errores. ¿Algún servicio que te haya dado problemas? Déjalo en los comentarios.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *