systemd 软件看门狗和 "normal" 进程监控之间的区别
Difference between systemd software watchdog and "normal" process monitoring
我已经尝试了 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种情况效果类似:每当程序killed/crashes/exits,10s后重新启动。据我了解,仅当需要监视程序内部的特定 thread/loop 时,使用看门狗才有优势。我错过了什么吗?
是的,看门狗将检测 Restart
指令之上和之外的 "liveness",后者仅检测 "deadness".
为了avoid being killed by the watchdog,您的服务必须主动调用sd_notify
。想象一下,如果发生了一些并没有完全破坏您的服务的坏事,比如死锁。该进程不会被 Restart
指令终止,但它会无法发送 sd_notify
并且会被看门狗重新启动(只要检查是在同一死锁线程上发送的).
我已经尝试了 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种情况效果类似:每当程序killed/crashes/exits,10s后重新启动。据我了解,仅当需要监视程序内部的特定 thread/loop 时,使用看门狗才有优势。我错过了什么吗?
是的,看门狗将检测 Restart
指令之上和之外的 "liveness",后者仅检测 "deadness".
为了avoid being killed by the watchdog,您的服务必须主动调用sd_notify
。想象一下,如果发生了一些并没有完全破坏您的服务的坏事,比如死锁。该进程不会被 Restart
指令终止,但它会无法发送 sd_notify
并且会被看门狗重新启动(只要检查是在同一死锁线程上发送的).