Un membre de mon équipe a trouvé une solution plutôt intelligente qui permet à monit de vérifier fréquemment (toutes les minutes) , mais une fois qu'il a tenté de redémarrer le service (ce qui prend environ 10 minutes), il attendra une période de grâce spécifiée avant d'essayer de démarrer encore.
Cela évite d'attendre trop longtemps entre les contrôles, ce qui, combiné à un démarrage lent, a un impact beaucoup plus important pour les clients. Il fonctionne en utilisant un script intermédiaire qui agit comme indicateur pour indiquer que monit prend déjà des mesures depuis le dernier échec.
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 (application Web à démarrage lent) est arrêté pendant 3 minutes d'affilée, redémarrez, MAIS uniquement si un script de redémarrage n'est pas déjà en cours d'exécution.
Le script qui est appelé a un sommeil spécifié qui attend plus longtemps que l'heure de début la plus lente pour le service (dans notre cas, nous nous attendons à terminer en ~ 10, donc nous dormons pendant 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"