Назад | Перейти на главную страницу

Как получить возможность выполнять несколько действий в случае сбоя отслеживаемого процесса?

У меня есть специальный сервис, за которым я хочу следить с помощью monit. Когда процесс не удается, я хочу скопировать журнал в общую файловую систему и перезапустить службу. Что-то вроде следующего, но я не уверен, что именно. Любые подсказки будут оценены.

check process pipeline with pidfile /var/run/pipeline.pid
   start program = "/sbin/start pipeline"
   stop  program = "/sbin/stop pipeline"
   if 10 restarts within 10 cycles then timeout
   # Not sure what to write next
   if <service has failed> 
      restart and 
      exec "/bin/bash -c 'cp /var/log/upstart/pipeline.log /nfs/logs/`hostname`.`date +'%m-%d-%Y_%H.%M.%S'`.log'"

Я бы написал небольшой сценарий bash, содержащий желаемые действия при событии. Вызовите этот сценарий из Monit.

Он чище, модульнее и ведет себя более предсказуемо. Та же идея применима к заданиям cron.

Например, из Страница примеров Monit, не могли бы вы поддержать это:

проверьте каталог httpd_core по пути / var / crash / core, если временная метка изменилась, затем exec "/ bin / bash -c 'if [ /bin/cat /tmp/monit_httpd_core.tmp | head -1 знак равно /bin/ls /var/crash/core/core.httpd* | tail -1 ]; затем / usr / bin / gdb -x /etc/gdb.batch / usr / sbin / httpd /bin/ls /var/crash/core/core.httpd* | tail -1 | tee /tmp/monit_httpd_core.tmp | mail -s httpd_crash admin@foo.bar webmaster@foo.bar; fi '"

или это:

check directory httpd_core with path /var/crash/core   if changed
timestamp then exec script.sh

куда script.sh содержит все уродство.