Мне нужно проверить, превышает ли загрузка ЦП 90% в течение 10 минут, если загрузка ЦП не опускается ниже 90% в течение более 10 минут, то выдается оповещение.
Мой сценарий на данный момент:
cpu_used = "90"
Взято изсценарий Хью
cpu=`top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'`
пример
if [ $cpu -ge $cpu_used ] ; then
echo $cpu
fi
как добавить 10 минут к приведенному выше оператору if, чтобы проверить, превышает ли загрузка процессора 90% более 10 минут перед отправкой оповещения? Заранее спасибо
решение1
Единственный способ добиться этого — записать загрузку процессора за 10-минутный интервал.
Вот как проверить, был ли загружен ваш ЦП более чем на 90% в течение более 10 минут.
#!/bin/bash
starttime=$(date +%s)
cpu_used=90
retval="Over 90% for 10 min"
while [ $(($(date +%s) - $starttime)) -le 600 ]
do
cpu=`top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'`
cpu=${cpu::-1}
cpu=${cpu%.*}
# If at any time the current cpu utilization is below the threshold, exit.
if [ $cpu -le $cpu_used ] ; then
retval="Not over 90% for 10 min"
break
fi
# Longer you sleep, less resource intensive. However, longer sleep decreases the accuracy.
sleep 1
done
echo $retval