Entender y administrar servicios en Linux usando systemd
, controlar su comportamiento en el arranque y diagnosticar eventos con el visor de logs journalctl
.
En versiones modernas de Linux (CentOS, RHEL, Fedora...), el sistema de inicialización y gestión de servicios es systemd
. Reemplaza a los sistemas antiguos como SysVinit y Upstart, y está diseñado para ser rápido, paralelo y estructurado.
Todo el ciclo de vida de un sistema operativo pasa por systemd
: arranque, activación de servicios, monitoreo, apagado, reinicios, sesiones de usuario, dispositivos, y más.
Como operador, tu trabajo no es solo saber iniciar o detener un servicio, sino también:
Diagnosticar por qué no arranca.
Ver si está fallando al inicio del sistema.
Validar si está habilitado para iniciar automáticamente.
Leer sus logs centralizados.
Entender el "estado" del sistema en tiempo real.
systemd
?Es el PID 1, el primer proceso que se ejecuta al arrancar Linux.
Gestiona:
Servicios (sshd
, httpd
, zabbix-server
, etc.).
Sockets (comunicación entre procesos).
Dispositivos montados (como /mnt/discoexterno
).
Sesiones de usuario, timers, targets (equivalentes a "runlevels").
Utiliza archivos llamados "unit files" para definir servicios, montajes, etc.
Controlamos todo con el comando systemctl
.
systemctl
– Control total de serviciosAcción | Comando |
---|---|
Ver estado del sistema | systemctl status |
Ver estado de un servicio | systemctl status <servicio> |
Iniciar servicio | sudo systemctl start <servicio> |
Detener servicio | sudo systemctl stop <servicio> |
Reiniciar servicio | sudo systemctl restart <servicio> |
Recargar configuración (sin reiniciar) | sudo systemctl reload <servicio> |
Habilitar al arranque | sudo systemctl enable <servicio> |
Deshabilitar al arranque | sudo systemctl disable <servicio> |
Ver si está habilitado | systemctl is-enabled <servicio> |
Listar servicios activos | systemctl list-units --type=service |
Ver todos los servicios (activos e inactivos) | systemctl list-units --all --type=service |
Ejemplo práctico:
sudo systemctl status sshd
sudo systemctl restart sshd
sudo systemctl enable sshd
journalctl
– El visor central de logsAntes, cada servicio escribía en su archivo: /var/log/httpd/
, /var/log/messages
, etc.
Ahora, todos los logs van al journal, que se consulta con:
Acción | Comando |
---|---|
Ver todo el log del sistema | journalctl |
Ver logs recientes (como tail ) |
journalctl -xe |
Ver logs de un servicio | journalctl -u <servicio> |
Ver logs desde el arranque | journalctl -b |
Seguir en tiempo real | journalctl -f |
Por fecha y hora | journalctl --since "10 min ago" o --since "2025-07-20 08:00" |
Ejemplo:
journalctl -u httpd
journalctl -xe
journalctl --since "1 hour ago"
Consejo: Puedes usar
grep
,less
, o tuberías para filtrar aún más.
Un servicio puede estar en uno de estos estados:
Estado | Significado |
---|---|
active (running) |
Está ejecutándose normalmente |
inactive (dead) |
Detenido, no tiene fallos |
failed |
Falló al iniciar o se detuvo con error |
activating |
Se está iniciando (puede trabarse aquí si hay error) |
deactivating |
Se está deteniendo |
Diagnóstico típico:
systemctl status zabbix-server
failed
, consulta el log con:journalctl -u zabbix-server
Esto se refiere a si un servicio se ejecutará automáticamente cuando el sistema se reinicie.
Habilitar:
sudo systemctl enable nginx
Deshabilitar:
sudo systemctl disable nginx
Ver si está habilitado:
systemctl is-enabled nginx
Internamente, esto crea enlaces simbólicos en
/etc/systemd/system/
.
En systemd
, los "targets" son conjuntos de servicios predefinidos que representan modos de operación del sistema (como los antiguos runlevel 3
, runlevel 5
, etc.).
Target | Significado |
---|---|
multi-user.target |
Sistema de línea de comandos (modo servidor) |
graphical.target |
Sistema con entorno gráfico |
rescue.target |
Modo de rescate (mínimo posible, root y nada más) |
emergency.target |
Modo emergencia (más restringido que rescue) |
default.target |
El que se usa por defecto al arrancar |
Ver el target actual:
systemctl get-default
Cambiar target predeterminado:
sudo systemctl set-default multi-user.target
Cambiar en caliente:
sudo systemctl isolate rescue.target
¿Servicio no inicia?
Verifica el estado:
systemctl status <servicio>
Revisa el log detallado:
journalctl -u <servicio>
¿Servicio no arranca al reiniciar?
Confirma que esté habilitado:
systemctl is-enabled <servicio>
¿El sistema arranca en modo gráfico, pero necesitas solo consola?
systemctl set-default multi-user.target
Recargar servicio sin cortar conexión (ideal en producción):
systemctl reload nginx
Ver todos los fallos recientes del sistema:
journalctl -p err -b
Diagrama de systemd
y sus componentes (unit
, target
, journal
, dependency tree
)
Captura de systemctl status
Captura de journalctl -xe
Mapa visual de equivalencias entre runlevels
antiguos y targets
actuales
El alumno puede verificar, iniciar, detener y reiniciar servicios correctamente.
Sabe diagnosticar fallos de arranque mediante status
y journalctl
.
Configura servicios para iniciar automáticamente tras reinicio.
Entiende la diferencia entre start
, enable
, restart
y reload
.
Maneja targets
y sabe cambiar entre ellos (modo rescate, multiusuario, etc.).
¿Qué diferencia hay entre systemctl stop
y disable
?
¿Cómo verificas por qué un servicio falló?
¿Cómo haces que un servicio arranque automáticamente al iniciar el sistema?
¿Qué comando usarías para ver los logs del servicio sshd
?
¿Qué representa el multi-user.target
?
No confíes solo en status
: siempre valida con journalctl
si algo no anda bien.
Habilita solo lo necesario: tener demasiados servicios en arranque puede volver lento el sistema o exponer vulnerabilidades.
Combina con monitoreo (Zabbix, etc.): si un servicio es crítico (como zabbix-agent
, sshd
, nginx
, etc.), monitorea si está activo.
Usa systemd-analyze blame
para ver qué servicios tardan más en iniciar.
Prueba systemctl edit <servicio>
para personalizar override sin tocar archivos originales (crea drop-in configs en /etc/systemd/system/...
).