Por que o Monit executa ações em ciclos não especificados?

2

Estou usando o Monit 5.5 com a diretiva CHECK PROGRAM para executar um script externo que faz algum trabalho para verificar se meu aplicativo está funcionando corretamente. Eu quero fazer essa verificação a cada poucos ciclos, de modo a evitar ser um fardo para o aplicativo. Minha configuração é esta:

CHECK program mydaemon with path "/usr/local/sbin/my_check.sh"
  ALERT [email protected] ON { exec }
  START PROGRAM "/etc/init.d/mydaemon start"
  STOP PROGRAM "/etc/init.d/mydaemon stop"

  if status = 1 for 2 cycles then restart

  # Trick monit into doing a restart + hitting our local alert
  if status = 1 for 4 cycles then exec "/bin/true"

  if status = 1 for 6 cycles then unmonitor

  every 3 cycles

As coisas funcionam quase como esperado - cada 3 ciclos monit executa a verificação ou executa uma ação, embora, como você pode imaginar pelo comentário na configuração, o que estou vendo em meus registros é que O ciclo 3, 4 e 5 monit também executará a ação de reinicialização:

May 24 14:03:24 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:03:54 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:03:54 monit[19488]: 'mydaemon' trying to restart
May 24 14:03:54 monit[19488]: 'mydaemon' stop: /etc/init.d/mydaemon
May 24 14:03:54 monit[19488]: 'mydaemon' start: /etc/init.d/mydaemon
May 24 14:04:24 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:04:24 monit[19488]: 'mydaemon' trying to restart
May 24 14:04:24 monit[19488]: 'mydaemon' stop: /etc/init.d/mydaemon
May 24 14:04:24 monit[19488]: 'mydaemon' start: /etc/init.d/mydaemon
May 24 14:04:54 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:04:54 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:04:54 monit[19488]: 'mydaemon' exec: /bin/true
May 24 14:04:54 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:04:54 monit[19488]: 'mydaemon' trying to restart
May 24 14:04:54 monit[19488]: 'mydaemon' stop: /etc/init.d/mydaemon
May 24 14:04:54 monit[19488]: 'mydaemon' start: /etc/init.d/mydaemon
May 24 14:05:25 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:05:25 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:05:25 monit[19488]: 'mydaemon' exec: /bin/true
May 24 14:05:25 monit[19488]: 'mydaemon' status failed (1) for /usr/local/sbin/my_check.sh -- Error: testing!
May 24 14:05:25 monit[19488]: 'mydaemon' trying to restart
May 24 14:05:25 monit[19488]: 'mydaemon' stop: /etc/init.d/mydaemon
May 24 14:05:25 monit[19488]: 'mydaemon' start: /etc/init.d/mydaemon

Por que monit está executando minha ação restart em ciclos não especificados?

PS - A duração do meu ciclo de monitoração é 10s, portanto, as ações no snippit de log estão separadas por 30s.

    
por Dave S. 24.05.2013 / 16:15

1 resposta

1

Monit age exatamente como você o instruiu.

Vamos quebrar a lógica:

Ciclo 1
Verificar o resultado: 1 falha consecutiva
Ação: nenhum

Ciclo 2
Verifique o resultado: 2 falhas consecutivas
Ação: reiniciar (a primeira condição é atendida)

Ciclo 3
Verificar o resultado: 3 falhas consecutivas
Ação: reiniciar (a primeira condição ainda é atendida, os últimos dois ciclos saíram com status = 1)

Ciclo 4
Verificar o resultado: 4 falhas consecutivas
Ação: restart AND exec / bin / true (ambas as condições primeira e segunda são atendidas)

Ciclo 5
Verificar o resultado: 5 falhas consecutivas
Ação: restart AND exec / bin / true (ambas as primeira e segunda condições ainda são atendidas)

Como seu programa sempre retorna 1, a primeira condição sempre será atendida após o resultado da verificação no segundo ciclo, uma vez que (pelo menos) os últimos 2 ciclos sempre terão falhado até você desassociar.

    
por 28.05.2013 / 00:10