A un miembro de mi equipo se le ocurrió una solución bastante inteligente que permite que monit verifique con frecuencia (cada minuto) , pero una vez que haya intentado reiniciar el servicio (que demora ~ 10 minutos) esperará un período de gracia específico antes de intentar comenzar de nuevo.
Esto evita esperar demasiado entre verificaciones, lo que combinado con un inicio lento es un impacto mucho mayor para los clientes. Funciona mediante el uso de un script intermedio que actúa como indicador para indicar que monit ya está tomando medidas desde el último error.
check host bamboo with address bamboo.mysite.com
if failed
port 443 type tcpSSL protocol http
and status = 200
and request /about.action
for 3 cycles
then exec "/bin/bash -c 'ps -ef | grep -v "$$" | grep -v "grep" | grep restartBamboo.sh >/dev/null 2>&1; if [ $? -ne 0 ]; then /opt/monit/scripts/restartBamboo.sh; fi'"
Si Bamboo (aplicación web de inicio lento) está inactivo durante 3 minutos seguidos, reinicie, PERO solo si aún no se está ejecutando un script de reinicio.
El script que se llama tiene una suspensión especificada que espera MÁS Y luego la hora de inicio más lenta para el servicio (en nuestro caso esperamos terminar en ~ 10, por lo que dormimos durante 15)
#!/bin/bash
echo "Retarting bambo by calling init.d"
/etc/init.d/bamboo stop
echo "Stopped completed, calling start"
/etc/init.d/bamboo start
echo "Done restarting bamboo, but it will run in background for sometime before available so, we are sleeping for 15 minutes"
sleep 900
echo "done sleeping"