LinuxParty
ACTUALIZACIÓN 23 de Julio de 2018, (15ª revisión).
Uno de las cosas a las que muchas veces no se presta atención es a la carga de trabajo, no sólo de los servidores, también de los equipos domésticos, los ordenadores de nuestra casa, incluso al móvil, pero bueno... LinuxParty no habla de móviles, sino se llamaría "AndroidParty", y no... por ahora va a ser que no...
El script funciona con el comando uptime, y puede variar el número de campos en función de la versión de la distribución Linux, y sobre todo, cuanto tiempo lleve encendido el ordenador/servidor, Algunas versiones de uptime devuelven 12 campos (al incluir el día de la semanaa y el día del mes) y otros, como el que mostramos en el ejemplo 10 campos, cada campo separado por un espacio. En función del número de campos, deberás modificar el script.
Para facilitarte esta tarea, hemos desarrollado dentro del script unas sentencias que cuenta las palabras de una oración, que para el comando "awk", son campos que extraer de la variable donde se guarden las palabras para contarlas, y solucionamos, automatizando el problema anterior.
campo1 c2 c3 c4 c5 c6 campo7 c8 c9 campo10
08:20:09 up 15:56, 2 users, load average: 2,82, 2,00, 1,28
El motor del script es el comando "uptime" que según indica la propia ayuda de uptime "El método preciso del cálculo del promedio de carga varía un poco entre sistemas. Algunos sistemas lo calculan como el número promedio de procesos ejecutables en los últimos 1, 5 y 15 minutos (que son las 3 columnas), pero algunos otros sistemas también incluyen los procesos en el estado de suspensión ininterrumpible (es decir, aquellos procesos que están esperando E/S del disco). El kernel de Linux incluye procesos ininterrumpibles.
El script sólo es a título orientativo y sólo sirve para enseñar la programación de scripts y las características de Linux, que también funcionan con FreeBSD, y debe adaptarlo a sus propias necesidades, así como leer la documentación de su proveedor del hardware con respecto a uptime y el hardware que le proporciona, así como la de su propia distribución Linux, Unix o FreeBSD
#!/bin/bash ################################################################################### # Script para comprobar la carga de trabajo de forma "colorida" # (c) Javier Orovengua Miguel, para ExtreHost.com y Linux-party.com # El script se puede compartir bajo los términos de la licencia GPL # y modificar, respetando el autor y estos créditos de inicio. # Versión del Script 1.15 #################################################################################### # Definimos colores, sólo por diversión rojo='\033[0;31m' rojoI='\033[1;31m' rosaI="\033[1;35m" amarillo='\033[1;33m' cian='\033[1;36m' azul='\033[0;34m' verde='\033[1;32m' destaca='\033[1;38m' NC='\033[0m' # No Color printf ${NC} clear # ********** Método antiguo desactualizado *************** # Uptime puede medir diferente si se acaba de arrancar el # ordenador / servidor, que si lleva un día funcionando, # como por ejemplo (acaba de arrancar): # 08:20:09 up 15:56, 2 users, load average: 2,82, 2,00, 1,28 # o por ejemplo, basta un día funcionando: # 18:45:27 up 1 day, 6:37, 2 users, load average: 2,03, 1,73, 1,66 # Para el primer caso, mide 60 caracteres, para el segundo, más. # MideUptime=`uptime` # CuantoMide=`echo ${#MideUptime}` # Método actual, contamos los campos que tiene CuantosCampos=`uptime` set -- $CuantosCampos CuantoMide=`echo $#` if [ "$1" == "--ahora" -o "$1" == "-ahora" ] ; then date +%H:%M:%S exit 0 fi printf "${amarillo}"; echo "Cuanto Mide: $CuantoMide" printf ${NC} # dentro de un ciclo sin condiciones se ejecuta el script echo "Interrumpa con Ctrl+C, 2 seugndos comprobación" while : do Color1='\033[0m' # No Color Color2='\033[0m' # No Color Color3='\033[0m' # No Color # Extraemos los 3 últimos campos de "uptime" y le quitamos # a los dos primeros la última coma (Primero y Segundo) if [ $( echo "$CuantoMide <= 10" | bc ) -eq 1 ] ; then # echo "Opción <=10" Primero=`uptime | awk '{print $8}' | sed -e s/','/'.'/g -e 's/.$//'` Segundo=`uptime | awk '{print $9}' | sed -e s/','/'.'/g -e 's/.$//'` Tercero=`uptime | awk '{print $10}' | sed s/','/'.'/g` fi if [ $( echo "$CuantoMide >= 11 && $CuantoMide < 12" | bc ) -eq 1 ] ; then # echo "Opción >=11 y < 12" Primero=`uptime | awk '{print $9}' | sed -e s/','/'.'/g -e 's/.$//'` Segundo=`uptime | awk '{print $10}' | sed -e s/','/'.'/g -e 's/.$//'` Tercero=`uptime | awk '{print $11}' | sed s/','/'.'/g` fi if [ $( echo "$CuantoMide >= 12 && $CuantoMide < 13" | bc ) -eq 1 ] ; then # echo "Opción >=12 y < 13" Primero=`uptime | awk '{print $10}' | sed -e s/','/'.'/g -e 's/.$//'` Segundo=`uptime | awk '{print $11}' | sed -e s/','/'.'/g -e 's/.$//'` Tercero=`uptime | awk '{print $12}' | sed s/','/'.'/g` fi if [ $( echo "$CuantoMide >= 13" | bc ) -eq 1 ] ; then # echo "Opción >=13" Primero=`uptime | awk '{print $11}' | sed -e s/','/'.'/g -e 's/.$//'` Segundo=`uptime | awk '{print $12}' | sed -e s/','/'.'/g -e 's/.$//'` Tercero=`uptime | awk '{print $13}' | sed s/','/'.'/g` fi if [ $( echo "$Tercero > $Segundo" | bc ) -eq 1 ] ; then Color3=$NC ; fi if [ $( echo "$Segundo > $Tercero" | bc ) -eq 1 ] ; then Color2=$rosaI ; Color3=$rojoI ; fi if [ $( echo "$Primero > $Segundo" | bc ) -eq 1 ] ; then Color1=$amarillo ; fi if [ $( echo "$Segundo > $Primero" | bc ) -eq 1 ] ; then Color1=$NC ; fi
# Mostramos printf "${NC}" # Extraemos la hora. Hora=$(date +%H:%M:%S) echo -n "Carga Trabajo ($Hora): " printf "${Color1}" echo -n "|| $Primero || " printf "${Color2}" echo -n "$Segundo || " printf "${Color3}" echo "$Tercero ||" # Restauramos colores Color1=$NC Color2=$NC Color3=$NC printf ${NC} sleep 2 done
Puedes editar el script y utilizarlo para tus propios propósitos.
Algunas características que podrían ser mejoradas:
Puedes meter las sentencias:
let "PalEstado=PalEstado+1" if [ $( echo "$PalEstado >= 10" | bc ) -eq 1 ] ; then /usr/local/bin/estado.sh let "PalEstado=0" fi
Dentro del bucle While, do ... done, para que llame al script que comprueba el estado, que escribimos en este artículo.
Script para comprobar el Estado General del Ordenador / Servidor.
También, puedes meter las sentencias "CuantosCampos y CuantoMide" dentro del bucle, y también dentro de las sentencias "if ... fi" (para no restar ciclos al ordenador) y así detectaría automáticamente y se adaptaría, cuando uptime cambie por estar un día completo encendido.
let "PalEstado=PalEstado+1" if [ $( echo "$PalEstado >= 10" | bc ) -eq 1 ] ; then /usr/local/bin/estado.sh let "PalEstado=0"
CuantosCampos=`uptime` set -- $CuantosCampos CuantoMide=`echo $#` fi
-
Scripting
- Iniciar una aplicación o un programa automáticamente desde el Cron en 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
- Cómo intercambiar el contenido de dos archivos en Linux
- Buscar directorios vacíos en Linux y borrarlos si procede.
- Shell Script Linux: Renombra quitando espacios
- Usar con crontab - último sábado del mes
- Shell Script de Linux para analizar un Fichero Access.log
- Analizar ficheros log de Linux con Scripts
- woof Código fuente
- Como tener seguro, protegido y encriptado tu Navegador Web Firefox (versión mejorada - versión 3)
- Arrays en Bash y Loops: iterar a través de los valores de la matriz
- Pasar una variable a AWK mediante la Shell.
- System Tar and Restore: un versátil script de copia de seguridad del sistema para Linux