Член моей команды придумал довольно умное решение, которое позволяет monit проверять часто (каждую минуту) , но как только он попытается перезапустить службу (что занимает ~ 10 минут), он будет ждать указанный льготный период, прежде чем попытаться запустить опять таки.
Это предотвращает слишком долгое ожидание между проверками, что в сочетании с медленным запуском оказывает гораздо большее влияние на клиентов. Он работает, используя промежуточный скрипт, который действует как флаг, чтобы указать, что monit уже предпринимает действия после последнего сбоя.
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'"
Если бамбук (веб-приложение с медленным запуском) не работает 3 минуты подряд, перезапустите, НО только если скрипт перезапуска еще не запущен.
У вызываемого скрипта есть заданный спящий режим, который ждет Дольше, чем самое медленное время запуска сервиса (в нашем случае мы ожидаем, что он завершится через ~ 10, поэтому мы спим в течение 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"