Files
clawd/README.md
2026-03-21 08:18:27 +08:00

200 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# clawd
Claw Box 守护进程,将本地 Linux 设备通过 WebSocket 长连接接入 [claw.cutos.ai](https://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
```bash
curl -fsSL https://raw.githubusercontent.com/stswangzhiping/clawd/main/install.sh | sudo bash
```
要求:
- Node.js >= 18
- Linuxsystemd
## 手动运行(开发调试)
```bash
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.json`root 运行)或 `~/.clawd/config.json`(普通用户)
```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`
## 服务管理
```bash
systemctl status clawd # 查看状态
journalctl -u clawd -f # 实时日志
systemctl restart clawd # 重启
systemctl stop clawd # 停止
systemctl disable clawd # 取消开机自启
```
## 更新
clawd 安装在 `/opt/clawd`,更新时需在该目录执行 `git pull`
```bash
cd /opt/clawd && sudo git pull && sudo systemctl restart 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 配网(用户手册)
Claw Box 是无屏设备,通过 WiFi 热点完成网络配置。
### 什么时候会出现热点?
| 场景 | 热点状态 |
|------|----------|
| 首次开机,从未配过 WiFi | 立即开启 |
| 配过 WiFi但信号范围外或密码已改 | 等待约 20 秒后自动开启 |
| WiFi 正常连接中 | 不开启 |
| 运行中 WiFi 突然断开 | 约 30 秒后自动开启 |
### 配网步骤
**第一步:找到热点**
打开手机 WiFi 设置,找到名为 **ClawBox-{设备ID}** 的热点(例如 `ClawBox-1002`)。
设备 ID 印在机身标签上。
**第二步:连接热点**
- 热点名称:`ClawBox-{设备ID}`
- 密码:**`12345678`**
**第三步:打开配网页面**
连接成功后,手机通常会**自动弹出配网页面**。
如果没有弹出,请手动打开浏览器访问:
- `http://ap.cutos.ai`
-`http://10.42.0.1`
**第四步:选择 WiFi 并连接**
1. 点击 **「扫描 WiFi」** 按钮,等待扫描完成
2. 从下拉列表中选择您的 WiFi或勾选「手动输入 SSID」
3. 输入 WiFi 密码
4. 点击 **「连接」**
**第五步:等待连接**
- 设备会临时关闭热点,尝试连接您选择的 WiFi
- **连接成功**:热点不再出现,设备自动接入云端
- **连接失败**:热点会在几秒后重新出现,请重新连接热点再试
### 更换 WiFi
如果需要更换 WiFi例如搬到新环境只需等待设备检测到网络断开
热点会自动重新出现,按上述步骤重新配网即可。
### 常见问题
| 问题 | 解决方法 |
|------|----------|
| 找不到 ClawBox 热点 | 等待 30 秒;确认设备已通电且指示灯正常 |
| 连上热点但页面打不开 | 手动访问 `http://10.42.0.1` |
| 扫描不到我的 WiFi | 点击刷新重试;确认路由器开启且距离不太远 |
| 输入密码后连接失败 | 检查密码是否正确;热点恢复后重试 |
| 配网成功但设备仍离线 | 检查路由器是否能上外网;稍等 1 分钟 |
### 系统要求
- `NetworkManager`(安装脚本自动启用)
- WiFi 硬件wlan0
## 架构
```
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 ← DNS 劫持NM dnsmasq-shared.d 配置)
│ ├── captive-server.js ← 配网 HTTP 页面Captive Portal
│ └── provisioning.js ← AP 常驻管理器WiFi 状态监控)
├── install.sh ← 一键安装(含 systemd + dnsmasq
└── package.json
```
## License
MIT