
Un servidor con 40 servicios en ejecución y sin idea de cuáles son realmente necesarios es un incidente de seguridad esperando a suceder. systemctl te da visibilidad y control total sobre cada demonio en tu sistema.
Cómo funcionan los servicios de Linux
Los servicios de Linux son procesos en segundo plano que se ejecutan independientemente de las sesiones de usuario. Se encargan de todo, desde el servicio web hasta la programación de cron y el acceso a SSH. En los sistemas Linux modernos, están gestionados por systemd.
¿Qué es un demonio?
Un demonio es un proceso que se ejecuta en segundo plano, típicamente comenzando al arrancar y funcionando continuamente. El nombre proviene de la tradición de Unix. Apache es un demonio. sshd es un demonio. MySQL es un demonio. No tienen un terminal de control y no requieren interacción del usuario para ejecutarse.
systemd vs sistemas de inicialización más antiguos
systemd reemplazó a SysVinit como el sistema de inicialización predeterminado en la mayoría de las distribuciones importantes alrededor de 2014-2015. Las principales diferencias: systemd inicia servicios en paralelo (arranque más rápido), utiliza archivos de unidad declarativos en lugar de scripts de shell, rastrea explícitamente las dependencias de los servicios e integra el registro a través del diario. Si estás en Ubuntu 16.04+, CentOS 7+ o Debian 8+, estás utilizando systemd.
Cómo listar los servicios de Linux
Lista todos los archivos de unidad con systemctl
El comando principal para listar servicios y sus estados:
sudo systemctl list-unit-files --type=serviceEsto muestra cada archivo de unidad de servicio en el sistema con su estado (habilitado, deshabilitado, enmascarado, estático o fallido) y su indicador de ajuste predeterminado del proveedor.
Listar solo servicios en ejecución
Para ver solo los servicios activos:
sudo systemctl list-units --type=service --state=runningEsto es útil cuando quieres auditar qué está realmente en ejecución frente a lo que solo está instalado.
Filtrar servicios por estado
systemctl lista servicios soporta filtrar por estado:
sudo systemctl list-units --type=service --state=failedLos servicios fallidos son aquellos que quieres investigar de inmediato. Un servicio que falló al arrancar y nadie notó es una fuente común de comportamiento misterioso.
Listado de servicios en sistemas más antiguos
En sistemas que aún usan SysVinit o que tienen el comando service:
service --status-allLa salida muestra + para en ejecución, – para detenido, y ¿? para estado desconocido.
Cómo gestionar servicios de Linux
Inicia y detén un servicio
Inicia un servicio detenido:
sudo systemctl start nginxDetén un servicio en ejecución:
sudo systemctl stop nginxEstos cambios son inmediatos, pero no persistentes. Si el servidor se reinicia, el servicio vuelve a su estado habilitado/deshabilitado.
Reiniciar y recargar un servicio
Reinicio completo (detiene y vuelve a iniciar el proceso):
sudo systemctl restart nginxRecargar configuración sin reiniciar el proceso (compatible con algunos servicios):
sudo systemctl reload nginxRecargar es preferible para servicios como nginx donde un reinicio corta brevemente las conexiones. No todos los servicios lo soportan.
Habilitar y deshabilitar al inicio
Habilita un servicio para que se inicie automáticamente al arrancar:
sudo systemctl enable nginxDeshabilítalo:
sudo systemctl disable nginxHabilitar y arrancar en un solo comando:
sudo systemctl enable --now nginxVerificar el estado de un servicio
Ver el estado actual y los registros recientes de un servicio:
sudo systemctl status nginxLa salida muestra si está activo o fallido, su PID, uso de memoria y las últimas 10 líneas del diario. Es el primer comando a ejecutar cuando un servicio se comporta de manera inesperada.
Lectura de la salida y registros de systemctl
Interpretación de estados de servicio
Los cinco estados que encontrarás en la salida de list-unit-files:
- habilitado: El servicio se inicia al arrancar a través de un enlace simbólico en /etc/systemd/system/ o similar.
- deshabilitado: El servicio no se iniciará al arrancar, pero puede iniciarse manualmente.
- enmascarado: El servicio está deshabilitado de forma firme. No se puede iniciar ni siquiera manualmente hasta que se desmascare.
- estático: El servicio no tiene sección de instalación en su archivo de unidad. Solo se ejecuta cuando otra unidad lo requiere.
- fallido: systemd intentó iniciar el servicio y salió con un error.
Visualización de registros con journalctl
systemd captura toda la salida del servicio en el diario. Ver registros para un servicio específico:
sudo journalctl -u nginxSigue la salida en vivo:
sudo journalctl -u nginx -fMuestra solo las últimas 100 líneas:
sudo journalctl -u nginx -n 100Mejores prácticas en la gestión de servicios de Linux
- Audita los servicios en ejecución periódicamente. Cualquier cosa que no instalaste y que no reconozcas debería ser investigada.
- Enmascara los servicios que nunca quieres que se ejecuten, no solo desactívelos. Deshabilitar deja la puerta abierta para que los paquetes los vuelvan a habilitar.
- Utiliza enable –now y disable –now para evitar estados de división donde un servicio está habilitado pero no en ejecución.
- Verifica los servicios fallidos después de cada reinicio: sudo systemctl –failed
- No reinicies servicios en producción sin verificar primero la opción de recarga. Recargar es menos disruptivo.
Preguntas frecuentes: Lista de servicios de Linux
Ejecuta: sudo systemctl list-units –type=service –state=running. Esto muestra solo los servicios actualmente activos. Para todos los servicios instalados, independientemente del estado, usa: sudo systemctl list-unit-files –type=service
Ejecuta: sudo systemctl start service-name. Reemplaza service-name con el nombre real del servicio (por ejemplo, nginx, mysql, sshd). Para habilitarlo también al arranque: sudo systemctl enable –now service-name
Ejecuta: sudo systemctl enable service-name. Esto crea los enlaces simbólicos necesarios para que el servicio se inicie automáticamente al arrancar. Para iniciarlo inmediatamente también, agrega –now: sudo systemctl enable –now service-name
stop halts the service right now but doesn’t change its boot behavior. disable removes the boot symlinks so it won’t start next reboot, but doesn’t affect the currently running instance. To both stop it now and prevent it from starting again, run: sudo systemctl disable --now service-name