Upstart Cookbook рекомендует задержку после остановки ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Используйте respawn
строфу без аргументов, и она будет продолжаться вечно:
respawn
post-stop exec sleep 5
(Я получил это из этого вопроса Ask Ubuntu )
Чтобы добавить экспоненциальную задержку, я бы попробовал поработать с переменной окружения в скрипте post-stop, я думаю, что-то вроде:
env SLEEP_TIME=1
post-stop script
sleep $SLEEP_TIME
NEW_SLEEP_TIME=`expr 2 \* $SLEEP_TIME`
if [ $NEW_SLEEP_TIME -ge 60 ]; then
NEW_SLEEP_TIME=60
fi
initctl set-env SLEEP_TIME=$NEW_SLEEP_TIME
end script
** РЕДАКТИРОВАТЬ **
Чтобы применить задержку только при повторном порождении, избегая задержки при реальном останове, используйте следующее, которое проверяет, является ли текущая цель «остановкой» или нет:
env SLEEP_TIME=1
post-stop script
goal=`initctl status $UPSTART_JOB | awk '{print $2}' | cut -d '/' -f 1`
if [ $goal != "stop" ]; then
sleep $SLEEP_TIME
NEW_SLEEP_TIME=`expr 2 \* $SLEEP_TIME`
if [ $NEW_SLEEP_TIME -ge 60 ]; then
NEW_SLEEP_TIME=60
fi
initctl set-env SLEEP_TIME=$NEW_SLEEP_TIME
fi
end script
never give up trying to respawn
остается без ответа. кто угодно?