
我有一台由 Watchdog 監控的伺服器,並且由於目前無法更換的網路硬體故障而偶爾會重新啟動。正如我所讀到的,Watchdog 向所有進程發送 SIGTERM,請求安全關閉,並在短時間內發送 SIGKILL,這將立即停止進程。然而,在這種情況下,由於重要的主進程尚未完全關閉且有未寫入的數據,因此會導致資料損壞。
Watchdog 在要求所有進程停止和強制它們停止之間需要多長時間?它是在 Watchdog 中硬連線、在 watchdog.conf 中設定(如果是的話,它從未在線上幫助頁中記錄),還是與其他系統設定相同?我該如何更改此設定?
編輯:我發現超時,但我仍在尋找有關如何正確重建和與系統整合的說明。
答案1
Sourceforge 的官方 5.15 版本現在包含此選項。可以使用以下行在檔案 watchdog.conf 中進行設定:
sigterm-延遲 = 5
(在範例文件中註解掉)。請注意,不應再使用實驗性“V6”版本,因為 5.15 幾乎擁有其所有功能,並且還修復了一些錯誤。另請注意,由於 NERC 資金的撤回,「sat」網站可能會在 2019 年稍後關閉。
答案2
從看門狗原始碼,shutdown.c
第 445 行,暫停被硬連線到看門狗中,並且是五秒。
答案3
我在這裡發布了一些有關建置、配置和測試 Linux 看門狗守護程式的資訊:
http://www.sat.dundee.ac.uk/~psc/watchdog/Linux-Watchdog.html
簡而言之,您需要配置系統來建立該專案:
sudo apt-get build-dep watchdog
sudo apt-get install build-essential automake libtool
然後獲取原始程式碼,您可能已經擁有該原始程式碼,但最新的可以透過以下步驟完成:
sudo apt-get install git
git clone git://git.code.sf.net/p/watchdog/code watchdog-code
移動到程式碼目錄並準備編譯:
cd watchdog-code
autoreconf -i
./configure
然後到原始碼目錄並編譯:
cd src
make clean
make
在目前目錄中,您將擁有新的二進位。在使用 使它們「生效」之前對其進行測試sudo make install
,或至少製作系統提供的程式的備份副本。由於調試符號的原因,它們與系統相比顯得臃腫,如果您想減小它們的大小,可以使用 strip 命令。
可以說一下 SIGTERM 需要什麼時間才能運作嗎?
編輯新增:
如果您使用目前的 GIT 拉取(2013 年 9 月 14 日),則編輯 shutdown.c 並在第 363 行更改“safe_sleep(4);”以獲得您想要的超時值(以秒為單位)。如果編輯系統提供的看門狗的程式碼(如上所述),請注意 sleep() 的時間不要超過硬體逾時(通常為 60 秒),因為系統將重新啟動!這就是 safe_sleep() 函數的原因,在等待時保持看門狗的狀態。