Shell-Skript zur Überprüfung der CPU-Auslastung

Shell-Skript zur Überprüfung der CPU-Auslastung

Ich versuche, ein Shell-Skript zu schreiben, das den freien Speicher des Servers überprüft. Ich versuche den folgenden Code 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") }'

Ich erwarte folgende Ausgabe: -

Der verfügbare freie Speicher beträgt 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

Wenn ich jedoch den obigen Befehl ausführe, wird sar -rzuerst die Ausgabe des Befehls gedruckt und dann die Zeile „Der verfügbare freie Speicher beträgt 0,99 GB.

Kann mir hier bitte jemand weiterhelfen?

Antwort1

;Sie haben mehrere Aktionen in Ihrer awk-Anweisung. Trennen Sie die Aktionen entweder durch ein Semikolon oder eine neue Zeile. In diesem Fall habe ich direkt nach dem Ende der Druckanweisung „$1“ ein Semikolon hinzugefügt .

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") }'

awk-Syntax für eine Bedingung mit mehreren Aktionen -

if (bedingter Ausdruck)
{
    Aktion1;
    Aktion2;
}

Antwort2

Die Ausgabe wird in gepuffert, awkaber nicht in system. Versuchen Sie im letzten awk Folgendes einzufügen

fflush();

vor dem system()Befehl:

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

verwandte Informationen