Я хочу использовать monit, чтобы убить процесс, который использует более X% ЦП более N секунд.
Я использую stress
для генерации нагрузки, чтобы попробовать простой пример.
Мой .monitrc:
check process stress
matching "stress.*"
if cpu usage > 95% for 2 cycles then stop
Запускаю monit (проверил синтаксис с monit -t .monitrc
):
monit -c .monitrc -d 5
И запускаю стресс:
stress --cpu 1 --timeout 60
Стресс отображается в top
как использование 100 % ЦП.
Я ожидал, что monit убьет стресс примерно за 10 секунд, но стресс успешно завершается. Что я делаю не так?
Я также попробовал monit procmatch "stress.*"
, который почему-то показывает два совпадения. Может это актуально?
List of processes matching pattern "stress.*":
stress --cpu 1 --timeout 60
stress --cpu 1 --timeout 60
Total matches: 2
WARNING: multiple processes matched the pattern. The check is FIRST-MATCH based, please refine the pattern
РЕДАКТИРОВАТЬ: Пробовал метод e.lopez
Мне пришлось удалить оператор запуска из .monitrc, потому что он вызывал ошибку в monit ('stress' failed to start (exit status -1) -- Program /usr/bin/stress timed out
, а затем зомби-процесс).
Итак, запустил стресс вручную:
stress -c 1
stress: info: [8504] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
.monitrc:
set daemon 5
check process stress
matching "stress.*"
stop program = "/usr/bin/pkill stress"
if cpu > 5% for 2 cycles then stop
Запустил монитор:
monit -Iv -c .monitrc
Starting Monit 5.11 daemon
'xps13' Monit started
'stress' process is running with pid 8504
'stress' zombie check succeeded [status_flag=0000]
'stress' cpu usage check skipped (initializing)
'stress'
'stress' process is running with pid 8504
'stress' zombie check succeeded [status_flag=0000]
'stress' cpu usage check succeeded [current cpu usage=0.0%]
'stress' process is running with pid 8504
'stress' zombie check succeeded [status_flag=0000]
'stress' cpu usage check succeeded [current cpu usage=0.0%]
'stress' process is not running
'stress' trying to restart
'stress' start skipped -- method not defined
Monit видит правильный процесс (соответствие pids), но видит использование 0% (стресс использует 1 процессор на 100% на вершину). Я отключил стресс вручную, когда monit говорит, что процесс не запущен (в конце, выше). Итак, monit нормально отслеживает процесс, но не видит правильного использования процессора.
Любые идеи?