Cómo listar servicios en ejecución en Linux: Una guía completa para todos los sistemas init

2025-02-12

Introducción

Los servicios de Linux son procesos en segundo plano que se ejecutan continuamente para realizar tareas del sistema, como gestionar redes, manejar inicios de sesión de usuarios o ejecutar servidores web. Estos servicios pueden ser gestionados a través de diversas herramientas, dependiendo de la distribución de Linux y el sistema init en uso.

Saber cómo listar los servicios en ejecución es esencial para los administradores de sistemas y desarrolladores. Ayuda con:

  • Solución de problemas – Verificar si un servicio crítico está en ejecución o ha fallado.
  • Monitoreo del rendimiento – Identificar servicios que consumen muchos recursos.
  • Auditoría de seguridad – Asegurarse de que solo los servicios necesarios estén activos.

Usando systemctl (Para sistemas basados en Systemd)

La mayoría de las distribuciones modernas de Linux, incluyendo Ubuntu (16.04+), CentOS (7+), Fedora y Debian (8+), utilizan systemd como el sistema init. El comando systemctl es la herramienta principal para gestionar y listar servicios en estos sistemas.

Comprobando el estado de un servicio específico

Para verificar si un servicio específico está en ejecución, usa:

systemctl status <nombre-del-servicio>

Por ejemplo, para comprobar si el servidor web nginx está en ejecución:

systemctl status nginx

La salida mostrará si el servicio está activo (en ejecución), inactivo o fallido, junto con registros para depuración.

Listando todos los servicios activos

Para listar todos los servicios en ejecución, usa:

systemctl list-units --type=service --state=running

Este comando muestra una tabla de todos los servicios actualmente en ejecución junto con su estado.

Listando todos los servicios (incluyendo los inactivos)

Si deseas ver todos los servicios, independientemente de si están en ejecución o no:

systemctl list-units --type=service

Esto incluirá servicios que están activos, inactivos, fallidos o en otros estados.

Filtrando servicios por estado

Puedes filtrar servicios según su estado usando:

systemctl list-units --type=service --state=failed

Esto listará solo los servicios fallidos, lo que puede ser útil para la solución de problemas.

Listando servicios habilitados al inicio

Para comprobar qué servicios están configurados para iniciarse automáticamente al arrancar:

systemctl list-unit-files --type=service | grep enabled

Ejemplo de salida

Una salida típica de systemctl list-units --type=service --state=running podría verse así:

UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
cron.service                loaded active running Regular background program processing daemon
networking.service          loaded active running Raise network interfaces
ssh.service                 loaded active running OpenBSD Secure Shell server
systemd-logind.service      loaded active running Login Service

Resumen

  • Usa systemctl status <servicio> para comprobar el estado de un servicio específico.
  • Usa systemctl list-units --type=service --state=running para listar servicios activos.
  • Usa systemctl list-units --type=service para ver todos los servicios.
  • Usa systemctl list-unit-files --type=service para ver servicios habilitados al inicio.

Usando ps y grep para procesos en ejecución

Si deseas listar servicios en ejecución sin depender de systemctl u otras herramientas de gestión de servicios, puedes usar ps (estado de procesos) junto con grep para encontrar procesos específicos.

Este método es útil cuando:

  • Estás trabajando en un sistema Linux mínimo que carece de comandos systemctl o service.
  • Quieres comprobar si un proceso específico está en ejecución, independientemente del sistema init.

Listando todos los procesos en ejecución

El comando ps aux muestra todos los procesos en ejecución en el sistema:

ps aux

Esto producirá una lista extensa de todos los procesos en ejecución, incluyendo sus identificadores de proceso (PIDs), uso de CPU, uso de memoria y nombres de comandos.

Buscando un servicio específico

Para comprobar si un servicio particular está en ejecución, usa ps aux | grep <nombre-del-servicio>:

ps aux | grep nginx

Esto mostrará líneas que incluyen "nginx", indicando si está en ejecución. La salida puede verse así:

root      1034  0.0  0.3  49536  3412 ?        Ss   12:34   0:00 nginx: master process /usr/sbin/nginx
www-data  1035  0.0  0.2  49536  2824 ?        S    12:34   0:00 nginx: worker process
user      2045  0.0  0.0  14856   900 pts/0    S+   12:35   0:00 grep --color=auto nginx

Aquí:

  • Las dos primeras líneas indican que el servicio nginx está en ejecución.
  • La última línea (grep --color=auto nginx) es el propio comando grep. Puedes excluirlo usando:
ps aux | grep nginx | grep -v grep

Mostrando procesos en un formato jerárquico

Para una vista más estructurada, usa:

ps fax

Esto muestra una estructura de árbol de los procesos en ejecución, facilitando la identificación de qué servicios están en ejecución y sus procesos hijos.

Encontrando servicios por puerto

Si sospechas que un servicio está ejecutándose en un puerto específico pero no estás seguro del nombre del servicio, usa:

netstat -tulnp | grep :80

o, si netstat no está disponible:

ss -tulnp | grep :80

Esto listará el proceso que utiliza el puerto 80 (comúnmente utilizado por servidores web como Nginx o Apache).

Resumen

  • Usa ps aux para listar todos los procesos en ejecución.
  • Usa ps aux | grep <nombre-del-servicio> para comprobar un servicio específico.
  • Usa ps fax para una vista en árbol de los procesos.
  • Usa netstat -tulnp o ss -tulnp para encontrar servicios que se ejecutan en puertos específicos.
Cómo listar servicios en ejecución en Linux

FAQ (Preguntas Frecuentes)

1. ¿Cómo puedo comprobar si un servicio está en ejecución en Linux?

Puedes usar diferentes métodos dependiendo de tu distribución de Linux:

  • Para sistemas basados en systemd:
    systemctl status <nombre-del-servicio>
    
  • Para sistemas basados en SysVinit:
    service <nombre-del-servicio> status
    
  • Usando ps y grep:
    ps aux | grep <nombre-del-servicio>
    

2. ¿Cómo puedo listar todos los servicios en ejecución?

  • Para sistemas basados en systemd:
    systemctl list-units --type=service --state=running
    
  • Para sistemas basados en SysVinit:
    service --status-all
    
  • Usando el comando ps:
    ps aux
    

3. ¿Cómo puedo comprobar si un servicio se inicia al arrancar?

  • Para systemd:
    systemctl is-enabled <nombre-del-servicio>
    
  • Para SysVinit (sistemas basados en RHEL):
    chkconfig --list <nombre-del-servicio>
    

4. ¿Cómo reinicio un servicio?

  • Para sistemas basados en systemd:
    sudo systemctl restart <nombre-del-servicio>
    
  • Para sistemas basados en SysVinit:
    sudo service <nombre-del-servicio> restart
    

5. ¿Cómo detengo o deshabilito un servicio?

  • Para detener un servicio temporalmente:
    sudo systemctl stop <nombre-del-servicio>
    
  • Para evitar que un servicio se inicie al arrancar:
    sudo systemctl disable <nombre-del-servicio>
    

6. ¿Cómo puedo encontrar qué servicio está utilizando un puerto específico?

Puedes usar netstat o ss para encontrar servicios que se ejecutan en un puerto específico:

netstat -tulnp | grep :80

o

ss -tulnp | grep :80

7. ¿Qué pasa si systemctl no se encuentra?

Si recibes un error como comando no encontrado: systemctl, significa que tu sistema podría no estar utilizando systemd. Intenta usar:

service --status-all

o

ps aux | grep <nombre-del-servicio>

8. ¿Cómo puedo listar servicios fallidos?

Para sistemas basados en systemd, ejecuta:

systemctl list-units --type=service --state=failed

9. ¿Cómo habilito el registro para un servicio específico?

Para comprobar los registros de un servicio gestionado por systemd, usa:

journalctl -u <nombre-del-servicio>

Para ver los registros en tiempo real:

journalctl -u <nombre-del-servicio> -f

10. ¿Puedo usar top o htop para ver servicios en ejecución?

¡Sí! top y htop proporcionan una vista en vivo de los procesos en ejecución:

  • Usa top:
    top
    
  • Usa htop (interactivo y fácil de usar):
    htop
    
    (Instala con sudo apt install htop o sudo yum install htop si no está disponible.)