Ubuntu

如何讓暴發戶退縮,而不是放棄

  • January 10, 2017

我希望 Upstart 做兩件事:

  1. 停止嘗試如此快地重生失敗的程序
  2. 永遠不要放棄嘗試重生

在理想情況下,upstart 會在 1 秒後嘗試重新啟動死程序,然後每次嘗試將延遲加倍,直到達到一個小時。

這樣的事情可能嗎?

Upstart Cookbook 建議停止後延遲(http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job)。使用respawn不帶參數的節,它將永遠繼續嘗試:

respawn
post-stop exec sleep 5

(我從這個 Ask Ubuntu question得到這個)

要添加指數延遲部分,我會嘗試在停止後腳本中使用環境變數,我認為是這樣的:

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

引用自:https://serverfault.com/questions/472955