Członek mojego zespołu wymyślił dość sprytne rozwiązanie, które pozwala monitorowi sprawdzać często (co minutę) , ale gdy spróbuje ponownie uruchomić usługę (co zajmuje ~ 10 minut), poczeka określony okres karencji przed próbą uruchomienia jeszcze raz.
Zapobiega to zbyt długiemu czekaniu między czekami, co w połączeniu z wolnym startem ma znacznie większy wpływ na klientów. Działa przy użyciu skryptu pośredniego, który działa jak flaga, wskazując, że monitor podejmuje już działania od ostatniej awarii.
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'"
Jeśli bambus (wolno uruchamiająca się aplikacja internetowa) nie działa przez 3 minuty z rzędu, uruchom ponownie, ALE tylko wtedy, gdy skrypt restartu jeszcze nie działa.
Wywołany skrypt ma określony sen, który czeka DŁUŻEJ, a następnie najwolniejszy czas rozpoczęcia usługi (w naszym przypadku spodziewamy się, że skończy się za ~ 10, więc śpimy przez 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"