У меня есть сервер 20. Убентер 20. Я работаю 4 процесса со следующими именами:
project-A
project-B
project-C
project-D
Все работает хорошо, но В некоторых случаях я вижу один из проектов, потребляющих ЦП и достигает 300%.
Итак, я хочу, чтобы скрипт убить (например) «Проект-б», когда он достигнет 300% процессора.
Следующий скрипт должен убить любой процесс MD5Sum
, который использует более 50% процессора. Замените MD5Sum
и 50
по мере необходимости.
while true; do
PID=$(pidof -s md5sum || cat /proc/sys/kernel/pid_max)
if [[ $(ps -p $PID -o %cpu= |grep -Po '^\s*\K[0-9]+') -gt 50 ]]; then
echo killing PID $PID
kill $PID
fi
sleep 1
done
Примечания:
PIDOF -S Your_Process
, чтобы убедиться, что он работает перед заменой MD5Sum
в вышеупомянутом сценарии. Убить -9 $ PID
вместо Убейте $ PID
, но только делайте это, если только если Первый метод не работает. PID=$(pidof -s md5sum || cat /proc/sys/kernel/pid_max); if [[ $(ps -p $PID -o %cpu= |grep -Po '^\s*\K[0-9]+') -gt 50 ]]; then echo killing PID $PID; kill $PID; fi
Объяснения:
пока правда; сделать ... сон 1; Сделано
петля до нажатия Ctrl-C; Это также позволяет уничтожать многократных процессов соответствия PIDOF -S MD5SUM || CAT / PROC / SYS / KERNEL / PID_MAX
сначала ( -S -S
) ID процесса процесса MD5SUM или несуществующей PID, если нет PS -P $ PID -O% CPU =
Утилизация процессора процессора $ PID в качестве десятичного процента | GREP -PO '^ \ S * \ k [0-9] +'
полосу процента CPU на целое число Если [[... -GT 50]]
Если ... больше 50