使用 systemd 看門狗支援來重新啟動應用程式

使用 systemd 看門狗支援來重新啟動應用程式

我有一個簡單的systemd服務單元,可以在服務定義中python定義的無條件退出時重新啟動我的腳本。Restart=always我只是想絕對確保即使腳本以某種方式掛起,我也可以透過啟用WatchdogSec=單元檔案中的變數來重新啟動它。

我的問題是systemd 日誌的官方文檔沒有解釋清楚。

引用同一頁面,

WatchdogSec=

配置服務的看門狗超時。啟動完成後,看門狗被啟動。該服務必須sd_notify(3)定期調用"WATCHDOG=1"(即“keep-alive ping”)。

不清楚的部分是,服務它本身負責維護與看門狗服務的 ping(或)它正在運行的應用程式(在我的例子中 - Python 腳本)需要透過更新提到的環境變數來維護 ping。

我的簡單服務定義

[Unit]
Description=dev-Status: Computes RF device availability status
           
[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
RestartSec=10
Restart=always
         
[Install]
WantedBy=default.target

因此,如果我僅將以下行添加到此服務文件中,它會自動重新啟動我的腳本嗎?

WatchdogSec=30s

答案1

要「拍」或 ping 看門狗,您可以使用 python系統發送通知的包:

from systemd.daemon import notify, Notification
notify(Notification.WATCHDOG)

相關內容