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

Условная логика, основанная на проблеме загрузки процессора

Я разрабатываю 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

...