Я разрабатываю bash-скрипт, который включает / отключает защиту ddos от облачной вспышки. Вот мой код:
#!/bin/bash
PERC=$(grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage}');
if [[ "$PERC" -gt 50 ]]
then
echo 'high load';
else
echo 'normal load';
fi
У меня 2 проблемы: 1. PERC всегда один и тот же результат. 2. Похоже, что результат переменной PERC неверен из-за ошибки »-bash: [[: 41.8679: синтаксическая ошибка: недопустимый арифметический оператор (токен ошибки -« .8679 ») '
Что не так с моим кодом?
Использование загрузки ЦП на определенный момент времени может привести к очень вводящим в заблуждение результатам - скажем, вы случайно поймали ее, когда она находится в процессе обновления кеша, что на 100% занимает ЦП в течение 0,2 секунды ...
более того bash
может обрабатывать только целочисленную арифметику. Вы можете использовать такой инструмент, как bc
делать более сложные операции. В качестве альтернативы, учитывая, что вам, вероятно, не важно десятичное значение, вы можете удалить его (cut -d. -f 1
)
Думали ли вы об использовании давно зарекомендовавшего себя средняя нагрузка концепция, которая давно присутствует в UNIX?
Также имейте в виду, что арифметика (несмотря на то, что она не работает) может не работать на других платформах:
/ proc / stat статистика ядра / системы. Зависит от архитектуры. Общие записи включают:
cpu 3357 0 4313 1362393 The amount of time, measured in units of USER_HZ (1/100ths of a second on most architectures, use sysconf(_SC_CLK_TCK) to obtain the right value), that the system spent in various states
...