stswangzhiping 7a80c03028 fix: kill NetworkManager's dnsmasq before starting our own
NetworkManager auto-starts its own dnsmasq when creating a hotspot,
which conflicts with our DNS-hijacking dnsmasq on the same interface.
Now kill ALL dnsmasq instances before starting ours.

Made-with: Cursor
2026-03-16 11:19:04 +08:00

clawd

Claw Box 守护进程,将本地 Linux 设备通过 WebSocket 长连接接入 claw.cutos.ai

功能

  • 自动生成硬件唯一指纹(box_id
  • 首次连接自动注册,获取 claw_id + token 并持久化
  • 每 30 秒上报系统指标CPU、内存、磁盘、温度、负载、运行时间
  • 断线自动重连(指数退避,最大 60 秒)
  • WS 层 Ping/Pong 活性检测,连接假死自动重连
  • frpc / ttyd 子进程 Watchdog 守护,崩溃自动重启(速率限制)
  • 结构化日志 + 文件轮转5MB × 5 份)
  • systemd 集成Watchdog、资源限制、优雅停止
  • 全局异常兜底uncaughtException / unhandledRejection

快速安装Linux需要 root

curl -fsSL https://raw.githubusercontent.com/stswangzhiping/clawd/main/install.sh | sudo bash

要求:

  • Node.js >= 18
  • Linuxsystemd

手动运行(开发调试)

git clone https://github.com/stswangzhiping/clawd.git
cd clawd
npm install
node bin/clawd.js

首次启动输出示例

2026-03-16T10:00:00.000Z INFO  [clawd] 启动中... 服务器 = wss://claw.cutos.ai/ws
2026-03-16T10:00:01.000Z INFO  [clawd] WebSocket 已连接
2026-03-16T10:00:01.100Z INFO  [clawd] 注册成功claw_id = 1000
2026-03-16T10:00:01.100Z INFO  [clawd]
2026-03-16T10:00:01.100Z INFO  [clawd] ╔════════════════════════════════════╗
2026-03-16T10:00:01.100Z INFO  [clawd] ║  Claw ID : 1000                   ║
2026-03-16T10:00:01.100Z INFO  [clawd] ║  PIN 码  : 779413                 ║
2026-03-16T10:00:01.100Z INFO  [clawd] ║  请在网页前台「添加设备」中输入    ║
2026-03-16T10:00:01.100Z INFO  [clawd] ╚════════════════════════════════════╝
2026-03-16T10:00:01.100Z INFO  [clawd]
2026-03-16T10:00:01.100Z INFO  [clawd] 等待激活,心跳正常运行...

配置文件

路径:/etc/clawd/config.jsonroot 运行)或 ~/.clawd/config.json(普通用户)

{
  "server": "wss://claw.cutos.ai/ws",
  "claw_id": 1000,
  "token": "6e0c182e...",
  "heartbeat_interval": 30
}

环境变量

变量 默认值 说明
CLAWD_LOG_LEVEL info 日志级别debug / info / warn / error
CLAWD_LOG_FILE 1 是否写日志文件(0 = 仅 stdout/journald
CLAWD_LOG_DIR ~/.clawd/logs 日志文件目录
CLAWD_CONFIG_DIR ~/.clawd 配置目录

systemd 安装后环境变量文件位于 /etc/clawd/env

服务管理

systemctl status clawd      # 查看状态
journalctl -u clawd -f      # 实时日志
systemctl restart clawd      # 重启
systemctl stop clawd         # 停止
systemctl disable clawd      # 取消开机自启

日志

  • stdout/journald所有日志同时输出到标准输出systemd 自动采集到 journald
  • 文件日志/etc/clawd/logs/clawd.log,单文件 5MB保留 5 份轮转

心跳上报字段

字段 说明 单位
cpu CPU 使用率 %
mem_total / mem_used 内存总量 / 已用 KB
disk_total / disk_used 磁盘总量 / 已用 KB
temperature CPU 温度 °C
load_1m / load_5m / load_15m 系统负载
uptime 运行时间

WiFi 配网(无屏设备)

首次开机无网络时clawd 自动进入 AP 配网模式:

  1. 设备开启热点 ClawBox-{ID}(无密码)
  2. 用户手机连接该热点
  3. 自动弹出配网页面(或访问 http://ap.cutos.ai
  4. 选择家庭 WiFi 并输入密码
  5. 设备连接成功后自动接入云端

需要 dnsmasq(安装脚本会自动安装)和 NetworkManager

架构

clawd/
├── bin/clawd.js           ← 入口,优雅停止
├── lib/
│   ├── client.js          ← 核心WS 连接、心跳、Ping/Pong、sd-notify
│   ├── config.js          ← 配置读写
│   ├── fingerprint.js     ← 硬件指纹生成
│   ├── frpc.js            ← frpc/ttyd/dashboard 管理Watchdog 守护)
│   ├── logger.js          ← 结构化日志 + 文件轮转
│   ├── metrics.js         ← 系统指标采集
│   ├── watchdog.js        ← 通用子进程守护(速率限制重启)
│   ├── network.js         ← 网络检测、WiFi 扫描/连接、AP 模式
│   ├── dns-hijack.js      ← dnsmasq 管理DNS 劫持 + DHCP
│   ├── captive-server.js  ← 配网 HTTP 页面Captive Portal
│   └── provisioning.js    ← 配网编排检测→AP→配网→退出
├── install.sh             ← 一键安装(含 systemd + dnsmasq
└── package.json

License

MIT

Description
No description provided
Readme 28 MiB
Languages
C 99%
Python 0.5%
JavaScript 0.2%
C++ 0.2%