一款专为 openclaw 网关设计的 Windows 守护程序。自动监控网关进程,异常退出时立即重启,保障 7×24 小时稳定运行。
- 自动启动网关 — 启动看门狗时若网关未运行,自动拉起
- 后台无窗口运行 — 直接调用
node.exe + openclaw.mjs在后台启动网关,不需要保持cmd/PowerShell窗口常驻 - 分层健康检查 — 结合目标进程匹配、TCP 端口探测和
openclaw health --json应用层校验 - 异常秒级响应 — 每 2 秒执行快速存活检查,网关宕机后可在约 2 秒内触发自动重启
- 最多重试 3 次 — 每次启动/重启失败后自动重试,超出次数弹出通知提醒
- 系统托盘常驻 — 最小化到托盘,不占用任务栏,双击图标召回主窗口
- 桌面通知 — 网关异常、重启成功、启动失败等关键事件推送 Windows 气泡通知
- 开机自启 — 托盘菜单一键开启/关闭开机自动启动(写入注册表
HKCU\...\Run) - 防重复运行 — 进程互斥锁,同一时间只允许运行一个实例
- 高 DPI 适配 — 自动适配 Windows 高分屏缩放
┌─────────────────────────────────────────┐
│ 🦞 老马OpenClaw小龙虾看门狗 ● ● │
├─────────────────────────────────────────┤
│ 网关状态 │
│ ● 在线 04:32 0 │
│ 下次检查 重启次数 │
├─────────────────────────────────────────┤
│ [16:07:17] → 定时检查中... (第 1 次) │
│ [16:07:17] ✓ 网关运行正常 │
│ [16:12:17] → 定时检查中... (第 2 次) │
│ [16:12:17] ✓ 网关运行正常 │
├─────────────────────────────────────────┤
│ [ 开始看门 ] [ 关闭看门 ] │
├─────────────────────────────────────────┤
│ v1.0.1 监控中 │
└─────────────────────────────────────────┘
实际启动时,日志区还会额外显示当前启动模式,例如:
[16:07:17] → 当前启动方式:后台直连 node
[16:07:17] ⚡ 正在调用命令启动网关...
从 Releases 页面下载最新的 老马OpenClaw小龙虾看门狗.exe,双击运行即可,无需安装 Python 或任何依赖。
前提条件:
- Windows 10 / 11
- 已安装 OpenClaw 并确保
openclaw命令可在命令行中使用
前提条件:
- Python 3.10+
- 已安装 OpenClaw 且
openclaw命令可用
# 克隆仓库
git clone https://github.com/majiabin2020/op-watchdog.git
cd op-watchdog
# 安装依赖
pip install -r requirements.txt
# 运行
python main.py# 安装开发依赖(含 PyInstaller)
pip install -r requirements-dev.txt
# 执行打包脚本
build.bat打包完成后,EXE 输出在 dist\ 目录。
op-watchdog/
├── main.py # 入口:组件装配、单实例守护
├── config.py # 全局配置常量
├── core/
│ ├── gateway.py # 网关管理:启动、停止、分层健康检测
│ └── watchdog.py # 看门狗主循环:状态机 + 监控逻辑
├── ui/
│ └── main_window.py # tkinter 主窗口 + 倒计时 + 日志区
├── utils/
│ ├── tray.py # 系统托盘(pystray)
│ ├── autostart.py # 开机自启(注册表)
│ └── notifier.py # Windows 气泡通知
├── assets/
│ ├── icon.py # 图标生成(Pillow)
│ └── icon.ico # 程序图标
├── tests/ # 单元测试
├── requirements.txt # 运行时依赖
├── requirements-dev.txt # 开发依赖(含打包、测试工具)
└── build.bat # 一键打包脚本
所有配置集中在 config.py,修改后重新打包生效:
| 配置项 | 默认值 | 说明 |
|---|---|---|
GATEWAY_PORT |
18789 |
网关监听的 TCP 端口 |
MONITOR_INTERVAL |
300 |
定时检查间隔(秒) |
STARTUP_TIMEOUT |
90 |
单次启动等待超时(秒) |
MAX_RETRY_COUNT |
3 |
最大启动/重启尝试次数 |
CHECK_INTERVAL |
2 |
启动等待期间的检测间隔(秒) |
SOCKET_TIMEOUT |
2 |
TCP 端口检测超时(秒) |
HEALTHCHECK_TIMEOUT |
8 |
openclaw health --json 健康检查超时(秒) |
启动看门狗
│
├─ 网关已健康?─── 是 ──→ 进入监控循环
│
├─ 端口已响应但应用层未就绪?─── 是 ──→ 等待健康检查通过
│
└─ 否 ──→ 尝试启动(最多 3 次)──→ 失败 ──→ 弹通知,停止
监控循环(每 5 分钟):
│
├─ 每 2 秒:快速存活检查(目标进程 + TCP 端口)
│ └─ 任一失败 ──→ 跳过等待,立即重启
│
└─ 5 分钟到:强健康检查(快速存活检查 + `openclaw health --json`)
├─ 正常 ──→ 继续循环
└─ 异常 ──→ 尝试重启(最多 3 次)──→ 失败 ──→ 弹通知,停止
当前实现采用两层探活策略:
- 快速存活检查:匹配 OpenClaw 对应的
node进程,并确认127.0.0.1:18789端口可连接,用于秒级发现故障。 - 强健康检查:在快速检查通过后,调用官方 CLI
openclaw health --json做应用层校验,避免仅凭端口可连就误判服务正常。
启动时,看门狗会先在日志区打印当前实际采用的启动方式:
后台直连 node:表示已绕过openclaw.cmd/openclaw.ps1,直接调用node.exe + openclaw.mjs后台调用 openclaw CLI:表示当前环境下未解析到底层入口,回退为后台调用openclaw命令
这样既保留了快速响应,又能更准确地区分“端口已起来但网关尚未真正可用”的情况。
| 库 | 版本 | 用途 |
|---|---|---|
| pystray | 0.19.5 | 系统托盘图标与菜单 |
| Pillow | 10.3.0 | 图标图像处理 |
| psutil | 5.9.8 | 进程管理(启动/清理残留进程) |
# 安装开发依赖
pip install -r requirements-dev.txt
# 运行测试
pytest tests/Q:点击"开始看门"后提示启动失败? A:可以按下面顺序排查:
- 确认
openclaw命令在命令行中可以正常执行,例如先手动运行openclaw gateway。 - 执行
openclaw health --json,检查 Gateway 是否已经真正进入健康状态。 - 检查
18789端口是否被其他程序占用,或 Gateway 是否启动后又立刻退出。
Q:为什么现在不需要保留 cmd / PowerShell 窗口?
A:看门狗现在会尽量绕过 openclaw.cmd / openclaw.ps1 这类包装脚本,直接调用底层的 node.exe 和 openclaw.mjs 在后台启动网关。只要网关和看门狗本身没有异常退出,就不需要额外保留任何命令行窗口。
Q:怎么确认当前真的是“后台直连 node”?
A:点击“开始看门”后,可以直接看主界面日志区。如果看到 → 当前启动方式:后台直连 node,就表示当前环境已经绕过命令行包装脚本,直接由 node.exe + openclaw.mjs 在后台启动网关。
Q:关闭主窗口后程序还在运行吗? A:是的。关闭窗口只是最小化到系统托盘,看门狗持续在后台运行。右键托盘图标选择"退出"才会完全退出。
Q:点"关闭看门"后网关还在运行吗? A:是的。"关闭看门"只是停止看门狗的自动监控,网关进程本身不会被终止,不影响正在进行的业务。
Q:开机自启在哪里设置?
A:右键系统托盘图标,点击"开机自动启动"即可切换,程序写入 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,不需要管理员权限。