Como obtenho o monit para realizar várias ações quando um processo monitorado falhou?

6

Eu tenho um serviço personalizado que quero monitorar com monit. Quando o processo falhar, eu quero copiar o log para um sistema de arquivos compartilhado e reiniciar o serviço. Algo como o seguinte, mas não sei o que. Quaisquer dicas seriam bem vindas.

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'"
    
por Atlas1j 07.03.2013 / 05:34

1 resposta

10

Eu escreveria um pequeno script bash contendo as ações do evento desejado. Chame esse script da Monit.

É mais limpo, mais modular e se comportará de maneira mais previsível. A mesma ideia se aplica a tarefas agendadas.

Por exemplo, na página de exemplos Monit , você preferiria dar suporte a isso:

check directory httpd_core with path /var/crash/core if changed timestamp then exec "/bin/bash -c 'if [ /bin/cat /tmp/monit_httpd_core.tmp | head -1 != /bin/ls /var/crash/core/core.httpd* | tail -1 ]; then /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 [email protected] [email protected]; fi'"

ou isto:

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

Onde script.sh contém toda a fealdade.

    
por 07.03.2013 / 05:42

Tags