Unix

如何控制一個runit服務的自動重啟率?

  • December 17, 2014

我有這個 runit 服務runlog/run腳本正常工作。

碰巧的是,服務本身可能由於外部原因而崩潰,並且可能在幾分鐘內無法啟動。runit 處理這種情況的預設方式是每隔幾秒鐘重新啟動一次服務。我該如何改變這種行為?

我最後的見解是添加一個check腳本並在那裡做一些魔術,但它似乎比它應該的要復雜得多。有沒有更好更簡單的方法?

我不熟悉這個工具,但是,如果我的任務是解決這個問題,並且一個非常短的手冊頁閱讀並沒有提供一個簡單的旋鈕來調整這個行為,我會做以下事情:

擴展現有的服務啟動腳本,或者如果這很麻煩,則將一個新的啟動腳本插入到鏈中(這反過來啟動原始的啟動腳本)。新的啟動腳本不是立即啟動服務,而是檢查上次啟動是否發生得足夠近。這可以通過檢查上一次啟動創建的信令文件來完成。如果該文件不存在,腳本可以繼續並觸摸該文件並啟動服務。如果文件存在,腳本應該檢查文件是否足夠舊。如果它不夠老,它應該循環等待(睡眠),直到文件足夠老。

這樣的事情可能會起作用(在重新啟動之間至少等待 1 分鐘):

#!/bin/bash

SIGNALDIR=/tmp
SIGNALFILE=service.started

while /bin/true; do
       found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l`
       [ "${found}" -eq 0 ] && break
       echo "Waiting"
       sleep 10
done

touch "${SIGNALDIR}/${SIGNALFILE}"
original service start...

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