
我有一個簡單的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)