19 de noviembre de 2008

Monitoreo de procesos con top/watch hecho en casa.

Yo, al igual que muchos otros administradores de sistemas allá afuera, estoy muy acostumbrado a monitorear el uso de los recursos de los sistemas usando el comando top. Precisamente en relación con mi post anterior, resulta que durante varios momentos del proceso de jumpstart me vi en la necesidad de entrar al servidor nuevo y obvio, de revisar los procesos que se ejecutaban en ese momento. De pronto, lo impensable: ¡No había top instalado!.

El siguiente comando, ejecutado en un shell bash hará el truco. Aunque quizás no tendrán la opción de ordenar la salida, pero al menos les ayudará en su tarea:

> while [ 1 ] ; do clear ; ps -ea -o pid,pcpu,pmem,rss,vsz,osz,s,args head -25 ; sleep 1 ; done

Quizás así lo vean un poco confuso, por lo que lo pondré como si fuera un shell script:

0: #!/bin/bash
1: while [ 1 ] ; do
2: clear
3: ps -ea -o pid,pcpu,pmem,rss,vsz,osz,s,args head -25
4: sleep 1
5: done


Ahora, en la línea 0 se declara la ruta del intérprete de comandos, en la línea 1, se define un ciclo while infinito, resulta clara esta afirmación puesto que la instrucción while(1) siempre va a ser verdadera.
En la línea 2 se manda a limpiar la pantalla, en la línea 3 se muestran las primeras 25 líneas de la salida del comando ps. La línea 4 detiene por 1 segundo la ejecución del script y finalmente, en la línea 5 se cierra el ciclo.

En realidad, este esquema les puede servir para automatizar el despliegue de comando, al estilo de lo que hace watch. Para el que no sepa, watch ejecuta un comando cíclicamente ad infinitum.

Por ejemplo, si estuviésemos instalando un software muy grande y nos interesa monitorear el espacio de los filesystems. La sintaxis sería:

> watch -n 1 "df -h" (En Linux)

o bien

> watch -n 1 "df -F ufs -h" (En solaris 9 o superior)

En nuestro home-made watch quedaría como:

0: #!/bin/bash
1: while [ 1 ] ; do
2: clear
3: df -F ufs -h
4: sleep 1
5: done


Ojalá esto les pueda ayudar.

No hay comentarios.: