LinuxParty
El script tiene un enfoque muy práctico para monitorizar el servidor de forma rápida en tiempo real sin saturar la terminal con herramientas más pesadas como htop o glances.
En la administración diaria de sistemas Linux, una de las tareas más recurrentes e indispensables es la supervisión del rendimiento de la máquina. Cuando el ventilador del servidor o de nuestro ordenador personal empieza a sonar con fuerza, o cuando las peticiones a un sitio web tardan más de lo habitual en responder, la primera pregunta que nos hacemos como administradores o desarrolladores es inmediata: ¿qué procesos están consumiendo mis recursos y quién los está ejecutando?
Existen multitud de herramientas avanzadas de monitoreo en el ecosistema GNU/Linux, desde las clásicas utilidades interactivas de consola como top, htop, btop o glances, hasta complejos sistemas de métricas y alertas como Prometheus, Grafana o Zabbix. Sin embargo, en muchas ocasiones no necesitamos instalar paquetes adicionales ni configurar daemons pesados. A veces, la solución más rápida, limpia y directa consiste en aprovechar la potencia nativa de la shell POSIX y de los comandos estándar del sistema.
En este artículo analizaremos en profundidad el script en Bash llamado queprocesos.sh, una herramienta ligera, auto-ejecutable y muy eficaz para realizar un control eventual de carga en tiempo real.
Código fuente del script queprocesos.sh
A continuación se muestra el código completo del script para que puedas copiarlo y guardarlo en tu propio sistema:
#!/bin/bash
for i in {1200..1} ; do
echo "USO DE CPU - CONTROL EVENTUAL DE CARGA, PUEDE CERRAR VENTANA"
# echo "----------"
ps -eo %cpu,%mem,user,comm,args --sort=-%cpu | sed s/child.*/''/g | head -n 18
# echo "--------------"
echo "USO DE MEMORIA"
# echo "--------------"
ps -eo %mem,%cpu,user,comm,args --sort=-%mem | sed s/child.*/''/g | head -n 18
# echo ""
echo -n "Termina en: "$i" segundos. "
uptime
sleep 1
clear
done
exit
Análisis detallado del funcionamiento del script
El script queprocesos.sh destaca por su simplicidad y por utilizar exclusivamente herramientas fundamentales presentes en cualquier distribución Linux (Debian, RedHat, Ubuntu, CentOS, Arch, etc.). Vamos a desglosar sus componentes clave para comprender qué hace exactamente cada bloque de código.
1. El bucle de temporización
El script se inicia con un bucle for decreciente:
for i in {1200..1} ; do
Esta estructura establece un contador que va desde 1200 hasta 1. Combinado con la instrucción sleep 1 que se ejecuta al final de cada iteración, el script está programado para ejecutarse de forma continua durante un período máximo de 1200 segundos (20 minutos). Transcurrido ese tiempo, el programa finaliza automáticamente sin dejar procesos colgados en segundo plano.
Esta limitación temporal es especialmente útil en servidores de producción: permite dejar la terminal abierta monitorizando un pico de carga puntual sin riesgo de que la pantalla quede refrescándose indefinidamente si olvidamos cerrar la sesión SSH.
2. Extracción y ordenación del consumo de CPU
La primera sección de informe se centra en los procesos que más procesamiento están demandando al sistema:
ps -eo %cpu,%mem,user,comm,args --sort=-%cpu | sed s/child.*/''/g | head -n 18
Analicemos la tubería (pipeline) paso a paso:
- ps -eo %cpu,%mem,user,comm,args: Indica al comando ps que formatee la salida mostrando el porcentaje de CPU utilizado (%cpu), el porcentaje de memoria RAM (%mem), el usuario propietario del proceso (user), el nombre corto del comando (comm) y la línea de comandos con sus argumentos completos (args).
- --sort=-%cpu: Ordena la lista de procesos de forma descendente en función del uso de la CPU. El signo - garantiza que los procesos más consumidores aparezcan en las primeras posiciones.
- sed s/child.*/''/g: Pasa la salida por el editor de flujo sed para recortar y limpiar nombres de hilos o subprocesos secundarios que contengan la cadena child, manteniendo la pantalla legible y enfocada en la información relevante.
- head -n 18: Filtra la lista para mostrar únicamente las primeras 18 líneas, lo que incluye el encabezado de las columnas y los 17 procesos con mayor impacto en el procesador.
3. Extracción y ordenación del consumo de Memoria
Inmediatamente después, el script realiza una comprobación equivalente enfocada en el consumo de RAM:
ps -eo %mem,%cpu,user,comm,args --sort=-%mem | sed s/child.*/''/g | head -n 18
En este caso, se cambia la clave de ordenación a --sort=-%mem. Esto nos permite identificar al instante si un proceso específico (como una instancia de MySQL, MariaDB, un script de PHP-FPM o un navegador web) está sufriendo una fuga de memoria (memory leak) o consumiendo más recursos de los asignados.
4. Información de estado global del sistema y refresco de pantalla
Al final de cada bucle, el script imprime información adicional del entorno:
echo -n "Termina en: "$i" segundos. " uptime sleep 1 clear
- Tiempo restante: Muestra un contador en tiempo real de los segundos que quedan antes del cierre automático del script.
- uptime: Muestra la hora actual del sistema, el tiempo que lleva encendido la máquina, el número de usuarios conectados y, lo más importante, las medias de carga del sistema (load average) a los 1, 5 y 15 minutos.
- sleep 1 y clear: Pausan la ejecución durante 1 segundo y limpian el buffer de la terminal, generando un efecto visual de actualización constante y fluida en la misma ventana.
Casos de uso prácticos: ¿Para qué sirve este script?
El script queprocesos.sh es una solución versátil dentro del arsenal de cualquier administrador de sistemas. Sus principales aplicaciones incluyen:
- Diagnóstico de picos de carga repentinos: Cuando el rendimiento del servidor cae drásticamente, ejecutar ./queprocesos.sh permite identificar en menos de dos segundos si el cuello de botella está provocado por un proceso fuera de control o por una saturación de memoria swap.
- Auditoría de usuarios y servicios: Al incluir la columna user, podemos verificar si un proceso sospechoso está siendo ejecutado por un usuario no autorizado (por ejemplo, el usuario www-data ejecutando procesos anómalos en un servidor web).
- Depuración de scripts y tareas programadas: Permite comprobar en tiempo real cómo se comportan tareas pesadas en Cron, scripts de migración de bases de datos o procesos de renderizado a medida que avanzan.
- Monitorización pasiva sin dependencias: Ideal para entornos restringidos, contenedores minimalistas o servidores donde no se dispone de permisos de superusuario para instalar utilidades externas de monitorización.
Cómo instalar y ejecutar el script
Para utilizar queprocesos.sh en tu sistema Linux, solo debes seguir estos sencillos pasos:
- Abre una terminal y crea el archivo:
nano queprocesos.sh
- Pega el código del script y guarda los cambios (Ctrl + O y Ctrl + X en nano).
- Concede permisos de ejecución al archivo:
chmod +x queprocesos.sh
- Ejecuta el script directamente
./queprocesos.sh
Si deseas tener el script accesible desde cualquier directorio de tu sistema, puedes moverlo a la ruta /usr/local/bin o a tu propio directorio ~/bin:
mv queprocesos.sh /usr/local/bin/queprocesos.sh
A partir de ese momento, bastará con escribir queprocesos en cualquier terminal para obtener una radiografía completa del rendimiento de tu servidor en tiempo real.
-
Scripting
- Monitoriza el uso de CPU y memoria en Linux con el script queprocesos.sh
- Cómo hacer operaciones matemáticas en Bash: cálculos con enteros, decimales, `bc` y `awk`
- Script para realizar copias de seguridad en un servidor en Producción con Dominios en Plesk
- Script para escuchar la Radio en Linux
- Script en Bash para pausas interactivas con timeout y confirmación
- 🧠 Cómo forzar evitar distracciones con tus propios scripts en Linux
- Script copiacompleta2, un Script para hacer copias de seguridad completa de tu usuario.
- Iniciar una aplicación o un programa automáticamente desde el Cron en Linux
- Cómo instalar y habilitar el completado automático de Bash Linux
- Operaciones matemáticas en Shell Scripts
- 30 formas de validar archivos de configuración o scripts en Linux
- Operaciones artiméticas en Shell Scripts



