Ubuntu
如何讓暴發戶退縮,而不是放棄
我希望 Upstart 做兩件事:
- 停止嘗試如此快地重生失敗的程序
- 永遠不要放棄嘗試重生
在理想情況下,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