¿Cómo listar todos los servicios en ejecución desde systemctl?

Publicado 27 de agosto de 2024

Problema: Ver los servicios activos en Linux

Administrar servicios en un sistema Linux es una tarea para administradores y usuarios. Systemctl, el comando principal para controlar systemd, ofrece una forma de gestionar y monitorear estos servicios. Obtener una visión general de todos los servicios en ejecución puede ser difícil sin conocer los comandos y opciones correctas.

Listado de todos los servicios en ejecución con Systemctl

Comando básico para listar servicios

Para listar todos los servicios administrados por systemd, usa este comando:

systemctl list-units --type=service

Este comando muestra una tabla con información sobre cada unidad de servicio. La salida incluye:

  • UNIT: El nombre de la unidad de servicio
  • LOAD: Si la definición de la unidad fue cargada
  • ACTIVE: El estado de activación de alto nivel de la unidad
  • SUB: El estado de activación de bajo nivel de la unidad
  • DESCRIPTION: Una breve descripción del propósito de la unidad

Para mostrar solo los servicios activos, agrega la opción --state=active:

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

Filtrado de servicios en ejecución

Para listar solo los servicios que están en ejecución, usa:

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

Este comando filtra los servicios inactivos o fallidos, mostrando solo aquellos en ejecución en tu sistema.

Para una vista más compacta, usa la opción --no-pager:

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

Esto evita que la salida se pagine, lo cual es útil cuando quieres canalizar los resultados a otros comandos o archivos.

Para una visión rápida de los servicios en ejecución sin detalles adicionales, usa:

systemctl list-units --type=service --state=running --plain --no-legend

Este comando elimina la información de encabezado y pie de página, proporcionando una lista limpia de servicios en ejecución.

Para contar el número de servicios en ejecución, canaliza la salida a wc:

systemctl list-units --type=service --state=running --plain --no-legend | wc -l

Este comando devolverá el número total de servicios en ejecución en tu sistema.

Consejo: Ordenar servicios en ejecución por uso de memoria

Para entender qué servicios están usando más recursos, puedes ordenar los servicios en ejecución por uso de memoria. Esto puede ayudar a los administradores de sistemas a optimizar el rendimiento del sistema.

Aquí hay un comando para listar los servicios en ejecución ordenados por uso de memoria:

systemctl list-units --type=service --state=running --no-pager | awk '{print $1}' | xargs -I {} systemctl status {} | grep Memory | sort -rnk 3 | head -n 10

Este comando:

  1. Lista todos los servicios en ejecución
  2. Extrae los nombres de los servicios
  3. Obtiene el estado de cada servicio
  4. Filtra la línea de uso de memoria
  5. Ordena los resultados por uso de memoria (de mayor a menor)
  6. Muestra los 10 servicios que más memoria consumen

La salida se verá así:

Memory: 1.2G
Memory: 800.5M
Memory: 456.3M
Memory: 234.1M
Memory: 189.7M
Memory: 156.2M
Memory: 98.4M
Memory: 76.9M
Memory: 54.3M
Memory: 43.8M

Comandos avanzados de Systemctl para la gestión de servicios

Ver información detallada del servicio

Para obtener más información sobre un servicio, usa el comando systemctl status seguido del nombre del servicio:

systemctl status nombre_del_servicio

Este comando proporciona una visión general del servicio, incluyendo:

  • Estado actual (activo, inactivo, fallido)
  • PID principal (ID de proceso)
  • Uso de memoria
  • Uso de CPU
  • Hora de inicio
  • Entradas de registro recientes

Ejemplo: Ver detalles del servicio SSH

systemctl status sshd

La salida incluye el estado actual del servicio, la ubicación del archivo de configuración y las entradas de registro recientes, lo que ayuda en la resolución de problemas.

Comprobar el estado del servicio

Para verificar el estado de un servicio, usa:

systemctl is-active nombre_del_servicio

Este comando devuelve "active" si el servicio está en ejecución, o "inactive" si no lo está.

Para comprobar si un servicio se inicia en el arranque:

systemctl is-enabled nombre_del_servicio

Esto devuelve "enabled" si el servicio se inicia automáticamente en el arranque, o "disabled" si no lo hace.

También puedes usar el comando systemctl show para obtener propiedades específicas de un servicio:

systemctl show -p ActiveState nombre_del_servicio
systemctl show -p UnitFileState nombre_del_servicio

Estos comandos muestran el estado activo actual y si el servicio está habilitado.

Para listar todos los servicios fallidos:

systemctl --failed --type=service

Este comando ayuda a identificar servicios que tienen problemas y pueden necesitar atención.

Métodos alternativos para listar servicios

Usando el comando PS

El comando ps ofrece otra forma de listar servicios en ejecución en Linux. Aunque no es tan detallado como systemctl, puede dar una vista rápida de los procesos activos, incluyendo servicios.

Para listar todos los procesos en ejecución, incluyendo servicios:

ps aux

Este comando muestra todos los procesos para todos los usuarios en un formato detallado. Para filtrar servicios específicos, puedes usar grep:

ps aux | grep nombre_del_servicio

Para una vista centrada en los servicios, puedes usar:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Este comando muestra el ID de proceso, ID del proceso padre, comando, uso de memoria y uso de CPU, ordenados por uso de memoria.

En comparación con systemctl, ps proporciona:

  • Información de procesos en tiempo real
  • Datos más detallados de uso de recursos
  • La capacidad de ver procesos no gestionados por systemd

Sin embargo, carece de información específica de systemd como estados de servicios y dependencias.

Consejo: Salida personalizada de PS

Puedes personalizar la salida de ps para mostrar solo la información que necesitas. Por ejemplo, para mostrar solo el PID, el nombre del comando y el uso de memoria de los procesos, usa:

ps -eo pid,comm,%mem --sort=-%mem | head

Este comando ordena los procesos por uso de memoria y muestra los 10 procesos que más memoria consumen.

Usando el comando Top

El comando top proporciona una vista dinámica y en tiempo real de los procesos en ejecución, incluyendo servicios. Para usar top:

top

Esto abre una pantalla interactiva que muestra:

  • Resumen del sistema (tiempo de actividad, carga promedio, uso de CPU)
  • Lista de procesos (ordenados por uso de CPU por defecto)

Para centrarse en los servicios, puedes usar:

top -c -p $(pgrep -d',' -f nombre_del_servicio)

Este comando muestra solo los procesos relacionados con el servicio especificado.

Ventajas de usar top:

  • Actualizaciones en tiempo real de la información del sistema y los procesos
  • Interfaz interactiva para ordenar y filtrar
  • Capacidad de ver tendencias de uso de recursos a lo largo del tiempo

Las limitaciones incluyen:

  • Menos información específica de servicios en comparación con systemctl
  • Puede requerir más recursos del sistema para el monitoreo continuo

Tanto ps como top complementan a systemctl al proporcionar diferentes vistas de los servicios y procesos en ejecución, permitiendo una mejor comprensión de la actividad del sistema.

Ejemplo: Monitoreo del servidor web Apache

Para monitorear el servidor web Apache usando top, puedes usar:

top -c -p $(pgrep -d',' -f apache2)

Este comando mostrará información en tiempo real sobre todos los procesos de Apache, incluyendo su uso de CPU y memoria. Es útil para rastrear el consumo de recursos de Apache durante períodos de alto tráfico.