Назад | Перейти на главную страницу

Сценарий оболочки для проверки использования ЦП

Я пытаюсь написать сценарий оболочки, который будет проверять свободную память сервера. Я пытаюсь под кодом 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") }'

Я ожидаю вывода как: -

Available Free Memory is 0.99 GB
Linux 2.6.18-274.el5 (XXXXXXXXX)      10/15/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

Однако, когда я запускаю команду выше, выводится вывод sar -r сначала команду, а затем строку "Доступен свободный доступ к памяти 0,99 ГБ

Кто-нибудь, пожалуйста, проведет меня сюда?

Вывод буферизируется в awk но не в system. В последнюю awk попробуйте вставить

fflush();

перед system() команда:

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

У вас есть несколько действий в вашем выражении awk, которые можно разделить точкой с запятой или новой строкой. В данном случае я добавил точку с запятой ; сразу после конца оператора печати «$ 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") }'

Синтаксис awk для условного оператора с несколькими действиями -

if (conditional-expression)
{
    action1;
    action2;
}