Módulo 8 – Servicios, systemd y arranque

Entender y administrar servicios en Linux usando systemd, controlar su comportamiento en el arranque y diagnosticar eventos con el visor de logs journalctl.


R.65da9f3879cbaf42e1479b8639c55f42 (1200×800)

Introducción operativa

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.


🧩 1. ¿Qué es 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.


🧩 2. Comando systemctl – Control total de servicios

Acció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

🧩 3. Comando journalctl – El visor central de logs

Antes, 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.


🧩 4. Estados y ciclos de vida de un servicio

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
  • Si dice failed, consulta el log con:
journalctl -u zabbix-server

🧩 5. Habilitar servicios al arranque

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/.


🧩 6. Targets – Los nuevos "runlevels"

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

Prácticas recomendadas y diagnósticos

  1. ¿Servicio no inicia?

    • Verifica el estado:

      systemctl status <servicio>
    • Revisa el log detallado:

      journalctl -u <servicio>
  2. ¿Servicio no arranca al reiniciar?

    • Confirma que esté habilitado:

      systemctl is-enabled <servicio>
  3. ¿El sistema arranca en modo gráfico, pero necesitas solo consola?

    systemctl set-default multi-user.target
  4. Recargar servicio sin cortar conexión (ideal en producción):

    systemctl reload nginx
  5. Ver todos los fallos recientes del sistema:

    journalctl -p err -b

Recomendaciones visuales

  • 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


✅ Criterios de evaluación

  • 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.).


❓ Preguntas de repaso

  • ¿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?


Tips finales de operación real

  • 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/...).