monit: проверьте процесс без pidfile

Можно выполнить шаги поиска и устранения неисправностей, упомянутые здесь.. СЖАТИЕ HTTP в IIS 6 и IIS 7 с помощью Сервисной учетной записи

37
задан 16 May 2011 в 23:44
5 ответов

Там никакой готовый к использованию инструмент с той функциональностью. Позвольте предполагают, что Вы хотите уничтожить 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, если время соответствует определенному. результат передал для уничтожения.

5
ответ дан 28 November 2019 в 19:47

Я решил эту точную проблему с наблюдателем 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.

3
ответ дан 28 November 2019 в 19:47

В 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 на файле, связанном с процессом.

80
ответ дан 28 November 2019 в 19:47

You could work this into monit as an exec statement.

    if [[ "$(uname)" = "Linux" ]];then killall --older-than 2m someprocessname;fi
0
ответ дан 28 November 2019 в 19:47

Monit может делать это начиная с версии 5.4:

if uptime > 3 days then restart

См .: the файл проекта CHANGES

3
ответ дан 28 November 2019 в 19:47

Теги

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