Shell Script para comprobar la utilización de la CPU

Shell Script para comprobar la utilización de la CPU

Estoy intentando escribir un script de shell que comprobará la memoria libre del servidor. Estoy probando el siguiente código top -M -n1 | grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }' | awk '{if ($1 < 1) print "\n Available Free memory is " $1 system("sar -r") }'

Espero un resultado como: -

La memoria libre disponible es de 0,99 GB
Linux 2.6.18-274.el5 (XXXXXXXXX) 15/10/15

00:00:02 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
00:10:01 4630292 11674812 71,60 342120 8428736 4096440 124 0,00 0
00:20:01 4632356 11672748 71,59 342120 8429228 4096440 124 0,00 0
00:30:01 4595960 11709144 71,81 342128 8429712 4096440 124 0,00 0
00:40:01 4601820 11703284 71,78 342136 8430220 4096440 124 0,00 0
00:50:01 4603536 11701568 71,77 342140 8430828 4096440 124 0,00 0
01:00:01 4600656 11704448 71,78 342152 8431340 4096440 124 0,00 0
01:10:01 4606704 11698400 71,75 342156 8431868 4096440 124 0,00 0
01:20:01 4605780 11699324 71,75 342168 8432384 4096440 124 0,00 0
01:30:01 4606880 11698224 71,75 342172 8432868 4096440 124 0,00 0
01:40:01 4642516 11662588 71,53 342176 8400916 4096440 124 0,00 0
01:50:01 4642224 11662880 71,53 342180 8401400 4096440 124 0,00 0
02:00:01 4604204 11700900 71,76 342184 8402232 4096440 124 0,00 0
02:10:01 4607188 11697916 71,74 342188 8402792 4096440 124 0,00 0
02:20:01 4562004 11743100 72,02 342196 8410480 4096440 124 0,00 0

Sin embargo, cuando ejecuto el comando anterior, sar -rprimero se imprime el resultado del comando y luego la línea "La memoria gratuita disponible es de 0,99 GB".

¿Alguien puede guiarme aquí?

Respuesta1

Tiene varias acciones en su declaración awk, separe las acciones con un punto y coma o una nueva línea. En este caso, agregué un punto y coma ;justo después del final de la declaración impresa "$1".

top -M -n1 | grep "Mem" | awk '{print 0 + $7}' | awk '{ print $1 / 1024 }' | awk '{if ($1 < 1) print "\n Available Free memory is " $1 ; system("sar -r") }'

Sintaxis awk para un condicional con múltiples acciones -

si (expresión-condicional)
{
    acción1;
    acción2;
}

Respuesta2

La salida se almacena en búfer awkpero no en system. En el último awk intenta insertar

fflush();

antes del system()comando:

awk '{if ($1 < 1) { print "\n Available Free memory is " $1 } fflush();  system("sar -r") }'

información relacionada