Скрипт, чтобы убить указанный процесс, когда оно достигло некоторого процессора

У меня есть сервер 20. Убентер 20. Я работаю 4 процесса со следующими именами:

project-A
project-B
project-C
project-D

Все работает хорошо, но В некоторых случаях я вижу один из проектов, потребляющих ЦП и достигает 300%.

Итак, я хочу, чтобы скрипт убить (например) «Проект-б», когда он достигнет 300% процессора.

1
задан 28 January 2021 в 02:19

1 ответ

Следующий скрипт должен убить любой процесс 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
0
ответ дан 18 March 2021 в 23:39

Другие вопросы по тегам:

Похожие вопросы: