Eu simplesmente usaria uma tarefa cron que executaria monit start servicename
nos intervalos desejados. Claro, você pode usar grupos para um controle mais refinado.
O Monit parece desistir de reiniciar um serviço se ele falhar algumas vezes e não o monitora. Não consigo encontrar nada na documentação sobre as especificidades de quando ou porquê.
A configuração My Monit seria configurada da seguinte forma:
set daemon 10
set logfile /var/log/monit.log
set statefile /var/lib/monit/monit.state
set alert [email protected] not { nonexist, action, instance }
include /etc/monit/conf.d/*
E este é um exemplo do conjunto de regras Monit que estou usando:
check process myservice
with pidfile /var/run/myservice/myservice.pid
start program = "/home/myservice/current/start-myservice.sh"
as uid myservice and gid myservice
stop program = "/home/myservice/current/stop-myservice.sh"
as uid myservice and gid myservice
mode active
No meu ambiente, quero que ele continue tentando em seus intervalos de pesquisa indefinidamente. Existe alguma maneira de configurar o monit para nunca interromper o monitoramento de um serviço, mesmo que ele não seja iniciado com êxito?
Eu simplesmente usaria uma tarefa cron que executaria monit start servicename
nos intervalos desejados. Claro, você pode usar grupos para um controle mais refinado.
Eu tive exatamente o mesmo problema em que, apesar de reiniciar o monit, ele se recusaria a monitorar após o tempo limite. Finalmente descobri que tinha que deletar o arquivo de estado monit ( /var/.monit.state
) e reiniciar o monitor para fazer com que ele monitorasse todos os programas novamente.
Depois de fazer algumas pesquisas, o Monit armazena os dados de monitoramento do sistema em um arquivo de "estado". E esse arquivo de "estado" controla quais serviços estão sendo monitorados / não monitorados.
Então, enquanto isso é um pouco "força bruta" -ish, definitivamente funciona. Se um serviço se tornar "não monitorado" devido a algo como um tempo limite, basta remover o arquivo de estado Monit do sistema da seguinte forma:
sudo rm /var/lib/monit/state
E, em seguida, reinicie o Monit assim e tudo deve ser bom:
sudo service monit restart
Com base no seu snippet de código do Monit, parece que você precisa modificar ou adicionar instruções de ciclo à sua sub-rotina do processo. Veja a documentação relevante aqui e aqui .
Parece que você pode querer configurar seus testes de serviço para executar todos os ciclos sem instruções de timeout. Veja também a sua página inicial no link . Check the page for the relevant service and look at
do campo "Existência". Seu padrão deve ser semelhante:
If doesn't exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
Tags monitoring linux monit