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 并且会被看门狗重新启动(只要检查是在同一死锁线程上发送的).