Skip to content

majiabin2020/op-watchdog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

老马 OpenClaw 小龙虾看门狗

一款专为 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 次)──→ 失败 ──→ 弹通知,停止

当前实现采用两层探活策略:

  1. 快速存活检查:匹配 OpenClaw 对应的 node 进程,并确认 127.0.0.1:18789 端口可连接,用于秒级发现故障。
  2. 强健康检查:在快速检查通过后,调用官方 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:可以按下面顺序排查:

  1. 确认 openclaw 命令在命令行中可以正常执行,例如先手动运行 openclaw gateway
  2. 执行 openclaw health --json,检查 Gateway 是否已经真正进入健康状态。
  3. 检查 18789 端口是否被其他程序占用,或 Gateway 是否启动后又立刻退出。

Q:为什么现在不需要保留 cmd / PowerShell 窗口? A:看门狗现在会尽量绕过 openclaw.cmd / openclaw.ps1 这类包装脚本,直接调用底层的 node.exeopenclaw.mjs 在后台启动网关。只要网关和看门狗本身没有异常退出,就不需要额外保留任何命令行窗口。

Q:怎么确认当前真的是“后台直连 node”? A:点击“开始看门”后,可以直接看主界面日志区。如果看到 → 当前启动方式:后台直连 node,就表示当前环境已经绕过命令行包装脚本,直接由 node.exe + openclaw.mjs 在后台启动网关。

Q:关闭主窗口后程序还在运行吗? A:是的。关闭窗口只是最小化到系统托盘,看门狗持续在后台运行。右键托盘图标选择"退出"才会完全退出。

Q:点"关闭看门"后网关还在运行吗? A:是的。"关闭看门"只是停止看门狗的自动监控,网关进程本身不会被终止,不影响正在进行的业务。

Q:开机自启在哪里设置? A:右键系统托盘图标,点击"开机自动启动"即可切换,程序写入 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,不需要管理员权限。


License

MIT

About

OpenClaw 网关看门狗 - 自动监控并重启 OpenClaw 网关进程,保障 7×24 小时稳定运行

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors