You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

systemd watchdog如何检测冻结应用并实现自动重启?

Systemd Watchdog 对应用冻结状态的检测与重启机制

systemd 的 watchdog 机制核心依赖应用主动发送心跳信号来维持与 systemd 的健康交互,你看到的示例没包含心跳逻辑,大概率是默认省略了这部分关键实现。

当应用处于未崩溃但冻结的状态时,systemd 是通过以下逻辑感知并触发重启的:

  • 首先需要在服务配置文件(.service)中开启 watchdog:
    1. 添加 WatchdogSec=<超时时间>(比如 WatchdogSec=30s),定义 systemd 等待心跳的最长间隔
    2. 配置 Restart=<重启策略>(比如 Restart=on-failure),让 systemd 在检测到异常时自动重启应用
  • 应用必须主动实现心跳上报逻辑:
    • 通过 libsystemd 库调用 sd_notify(0, "WATCHDOG=1") 发送心跳
    • 或者直接向环境变量 NOTIFY_SOCKET 指定的 Unix 域套接字发送字符串 "WATCHDOG=1"
  • 当应用冻结后,会停止发送心跳,systemd 在 WatchdogSec 时间内未收到新的心跳信号,就会判定应用处于异常状态,随后按照配置的重启策略重启应用。

需要注意的是,如果应用完全没实现心跳上报,systemd 的 watchdog 机制不会生效——它本质是一种"合作式"监控,依赖应用自身的健康状态上报。

内容的提问来源于stack exchange,提问作者czrty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:15:43