我已经尝试了 2 个 systemd 单元配置:
progA.service
[Service]
Type=simple
ExecStart=/opt/progA
WatchdogSec=10s
progB.service
[Service]
Type=simple
ExecStart=/opt/progB
Restart=always
RestartSec=10
2种情况下的效果差不多:每当程序kill/crash/exit时,10s后重新启动。据我了解,仅当需要监视程序内的特定线程/循环时,使用看门狗才有优势。我错过了什么吗?
最佳答案
是的,看门狗将检测高于和超出 Restart
指令的“事件”,后者仅检测“死亡”。
为了avoid being killed by the watchdog ,您的服务必须主动调用 sd_notify
。想象一下,如果发生了一些并没有完全破坏您的服务的坏事,比如死锁。该进程不会被 Restart
指令终止,但它会无法发送 sd_notify
并且会被看门狗重新启动(只要检查正在发送死锁的同一个线程)。
关于process - systemd软件看门狗和 "normal"进程监控的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44624319/