Я ищу способ убить все процессы с заданным именем, которые выполняются более X раз. Я порождаю много экземпляров этого конкретного исполняемого файла, и иногда он переходит в плохое состояние и работает вечно, занимая много процессора.
Я уже использую monit, но я не знаю, как проверить процесс без pid-файла. Правило будет примерно таким:
kill all processes named xxxx that have a running time greater than 2 minutes
Как бы вы выразили это в monit?
monitoring
monit
Parand
источник
источник
Ответы:
В monit вы можете использовать соответствующую строку для процессов, которые не имеют PID. Используя пример процесса с именем «myprocessname»,
Возможно, если вы проверите, находится ли загрузка ЦП на определенном уровне в течение 10 циклов мониторинга (по 30 секунд каждый), то перезапустите или убейте, что может быть вариантом. Или вы можете использовать временную проверку monit для файла, связанного с процессом.
источник
Там нет готового к использованию инструмента с такой функциональностью. Предположим, вы хотите уничтожить скрипты php-cgi, которые работают дольше минуты. Сделай это:
pgrep php-cgi | xargs ps -o pid,time | perl -ne 'print "$1 " if /^\s*([0-9]+) ([0-9]+:[0-9]+:[0-9]+)/ && $2 gt "00:01:00"' | xargs kill
pgrep
выбирает процессы по имени,ps -o pid,time
печатает время выполнения для каждого pid, а затем анализирует строку, извлекает из нее время и печатает pid, если время сравнивается с заданным. Результат передан, чтобы убить.источник
Я решил эту проблему с помощью ps-watcher и написал об этом на linux.com несколько лет назад. ps-watcher позволяет вам отслеживать процессы и уничтожать их в зависимости от накопленного времени выполнения. Вот соответствующая конфигурация ps-watcher, предполагая, что ваш процесс называется 'foo':
Ключ это линия
который говорит: «если накопленное время процесса> 1 часа И я не родительский процесс, перезапустите меня.
Итак, я понимаю, что в ответе не используется monit, но он работает. ps-watcher легок и прост в настройке, так что нет ничего плохого в том, чтобы запускать его в дополнение к настройке вашего монитора.
источник
Monit может сделать это начиная с версии 5.4:
Смотрите: файл проекта CHANGES
источник
Вы можете превратить это в monit как выражение exec.
источник