Можно выполнить шаги поиска и устранения неисправностей, упомянутые здесь.. СЖАТИЕ HTTP в IIS 6 и IIS 7 с помощью Сервисной учетной записи
Там никакой готовый к использованию инструмент с той функциональностью. Позвольте предполагают, что Вы хотите уничтожить 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 и записал об этом на linux.com несколько лет назад. наблюдатель PS действительно позволяет Вам управляющим процессам и уничтожает их на основе накопленного времени выполнения. Вот соответствующая конфигурация наблюдателя PS, предполагая, что Ваш процесс называют 'нечто':
[foo]
occurs = every
trigger = elapsed2secs('$time') > 1*HOURS && $ppid != 1
action = <<EOT
echo "$command accumulated too much CPU time" | /bin/mail user\@host
kill -TERM $pid
EOT
[foo?]
occurs = none
action = /usr/local/etc/foo restart
Ключ является строкой
trigger = elapsed2secs('$time') > 1*HOURS && $ppid != 1`
который говорит, 'если накопленное время процесса> 1 час, И я не родительский процесс, перезапускаю меня.
Так, я понимаю, что ответ не использует monit, но он действительно работает. наблюдатель PS легок и прост настроить, таким образом, нет никакого вреда, выполняющего его в дополнение к Вашей установке monit.
В monit можно использовать соответствующую строку для процессов, которые не имеют PID. Используя пример процесса, названного "myprocessname",
check process myprocessname
matching "myprocessname"
start program = "/etc/init.d/myproccessname start"
stop program = "/usr/bin/killall myprocessname"
if cpu usage > 95% for 10 cycles then restart
Возможно, если Вы проверяете, чтобы видеть, ли загрузка ЦП на определенном уровне для 10 контролирующих циклов (30 секунд каждый), то перезапустите или уничтожьте, который мог быть опцией. Или Вы могли использовать тестирование метки времени monit на файле, связанном с процессом.
You could work this into monit as an exec statement.
if [[ "$(uname)" = "Linux" ]];then killall --older-than 2m someprocessname;fi
Monit может делать это начиная с версии 5.4:
if uptime > 3 days then restart
См .: the файл проекта CHANGES