Upstart Cookbook recomienda un retraso posterior a la detención ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Usa la respawn
estrofa sin argumentos y continuará intentándolo para siempre:
respawn
post-stop exec sleep 5
(Obtuve esto de esta pregunta de Ubuntu )
Para agregar la parte de retraso exponencial, intentaría trabajar con una variable de entorno en el script posterior a la parada, creo que algo así como:
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
** EDITAR **
Para aplicar el retraso solo al reaparecer, evitando el retraso en una parada real, use lo siguiente, que verifica si el objetivo actual es "parar" o no:
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
permanece sin respuesta. ¿nadie?