【实战篇】用 OpenClaw 搭建你的"数字打工人"
前面六篇文章,我们学会了 OpenClaw 的原理、技能、记忆、定时任务、子 Agent。现在,是时候把这些能力串联起来,搭建一个真正能干活的”数字打工人”了。这篇文章不讲概念,只讲实战——从需求到落地的完整过程。
一、实战目标:一个完整的”数字打工人”
我们要搭建一个自动运维助手,它具备以下能力:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
最终效果:你只负责看推送,它负责干活。
二、第一步:搭建监控基础
2.1 创建监控脚本
需求:检查服务器是否存活
方案:用 Shell 脚本 + curl
#!/bin/bash# 保存为 ~/scripts/check-server.shSERVER="https://your-server.com"TIMEOUT=10# 健康检查RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --max-time $TIMEOUT $SERVER/health)if [ "$RESPONSE" = "200" ]; thenecho "✅ 服务器正常 (HTTP $RESPONSE)"exit 0elseecho "🚨 服务器异常 (HTTP $RESPONSE 或无法连接)"exit 1fi
说明:
-
curl -s静默模式,不输出进度 -
-o /dev/null丢弃响应体,只保留状态码 -
-w "%{http_code}"只输出 HTTP 状态码 -
--max-time $TIMEOUT超时 10 秒
2.2 测试脚本
# 添加执行权限chmod +x ~/scripts/check-server.sh# 测试~/scripts/check-server.sh# 输出:✅ 服务器正常 (HTTP 200) 或 🚨 服务器异常
三、第二步:创建定时监控任务
3.1 需求分析
-
频率:每小时检查一次 -
通知:有问题才通知,正常时静默 -
渠道:微信
3.2 创建定时任务
使用内置 cron 工具:
{"action": "add","job": {"name": "服务器存活监控","agentId": "main","schedule": {"kind":"every","everyMs":3600000},"sessionTarget": "isolated","payload": {"kind": "agentTurn","message": "执行 ~/scripts/check-server.sh。如果输出包含「异常」,立即告警:服务器可能挂了,请检查。如果输出包含「正常」,不输出任何内容。要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 只在异常时输出 (4) 告警内容控制在 1 句话"},"delivery": {"mode":"announce"}}}
关键设计:
-
everyMs: 3600000= 每小时(1小时 = 3600秒 = 3600000毫秒) -
sessionTarget: "isolated"= 独立会话,不污染主对话 -
message 中的条件判断 = “正常时不输出”
3.3 验证任务创建
openclaw cron list
输出示例:
job_xxx 服务器存活监控 every 1h enabled next: 10:00
四、第三步:添加自动修复能力
4.1 需求分析
监控只是发现问题,真正有用的是自动修复。
场景:服务器进程挂了,自动重启
4.2 创建修复脚本
#!/bin/bash# 保存为 ~/scripts/fix-server.shSERVER="user@your-server.com"SERVICE="nginx"echo "尝试重启 $SERVER 上的 $SERVICE..."# SSH 远程执行(需要提前配置免密登录)ssh $SERVER "sudo systemctl restart $SERVICE && echo '重启成功' || echo '重启失败'"
前提条件:
-
本地已配置 SSH 免密登录 -
服务器上 sudo 免密码(或在 sudoers 中配置)
4.3 创建自动修复子 Agent
方案:当监控发现异常时,启动子 Agent 执行修复
在定时任务中修改 message:
{"action": "add","job": {"name": "服务器存活监控+自动修复","agentId": "main","schedule": {"kind":"every","everyMs":3600000},"sessionTarget": "isolated","payload": {"kind": "agentTurn","message": "执行 ~/scripts/check-server.sh。如果输出包含「异常」:(1) 先告警:服务器异常,正在尝试自动修复 (2) 执行 ~/scripts/fix-server.sh (3) 再次检查 (4) 汇报最终结果。如果输出包含「正常」,不输出任何内容。要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 每步操作简短汇报"},"delivery": {"mode":"announce"}}}
工作流程:
检查 → 异常 → 告警 → 修复 → 再检查 → 汇报
五、第四步:每日晨报
5.1 需求分析
每天早上 9 点,自动推送:
-
昨日服务器运行情况 -
今日天气 -
今日待办
5.2 创建晨报任务
{"action": "add","job": {"name": "每日晨报","agentId": "main","schedule": {"kind":"cron","expr":"0 9 * * *"},"sessionTarget": "isolated","payload": {"kind": "agentTurn","message": "生成今日晨报,包含:(1) 昨日服务器监控结果(查 ~/logs/server.log 最后 20 行)(2) 今日天气(查北京天气)(3) 今日待办(查 ~/notes/todo.md)。格式:简洁清晰,每项 2-3 句话。要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 直接输出晨报内容"},"delivery": {"mode":"announce"}}}
cron 表达式说明:
-
0 9 * * *= 每天 9:00 -
格式: 分 时 日 月 星期
5.3 效果示例
📊 今日晨报 (2026-05-08)🖥️ 服务器状态:昨日运行正常,无异常记录🌤️ 天气:北京晴,15-25℃,适合户外活动📝 待办:- 完成项目文档整理- 下午 3 点代码评审- 晚上健身房
六、第五步:每日日报
6.1 需求分析
每天下午 6 点,自动生成运维日报:
-
今日告警次数 -
处理结果统计 -
需要人工跟进的事项
6.2 创建日报任务
{"action": "add","job": {"name": "每日运维日报","agentId": "main","schedule": {"kind":"cron","expr":"0 18 * * 1-5"},"sessionTarget": "isolated","payload": {"kind": "agentTurn","message": "生成今日运维日报,包含:(1) 今日告警次数(grep 统计 ~/logs/alerts.log)(2) 自动修复成功次数 (3) 需要人工跟进的事项。格式:表格 + 简要说明。要求:(1) 不要回复 HEARTBEAT_OK (2) 不要调用 message 工具 (3) 直接输出日报内容"},"delivery": {"mode":"announce"}}}
cron 表达式说明:
-
0 18 * * 1-5= 周一到周五 18:00 -
1-5= 周一到周五
七、第六步:智能分析能力
7.1 需求分析
遇到复杂问题时,自动查资料分析。
场景:服务器 CPU 持续 100%,需要分析原因
7.2 创建分析子 Agent
方案:手动触发,但可以集成到告警流程中
你:分析服务器 CPU 高的原因OpenClaw:启动分析子 Agent...
实际操作:
{"task": "服务器 CPU 持续 100%,请:(1) 搜索「Linux CPU 100% 排查方法」(2) 列出常见原因和排查步骤 (3) 生成排查清单。要求:简洁清晰,控制在 300 字以内","runtime": "subagent","mode": "run","timeoutSeconds": 300}
自动触发版本(在告警 message 中加入):
{"message": "如果 CPU 持续 100% 超过 10 分钟:(1) 告警 (2) 启动子 Agent 分析原因 (3) 推送分析结果"}
八、完整架构图

九、配置文件清单
9.1 脚本文件
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
9.2 日志文件
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
9.3 数据文件
|
|
|
|
|---|---|---|
|
|
|
|
十、进阶:让”数字打工人”更智能
10.1 加入记忆能力
在 OpenClaw 的记忆文件中记录:
-
常见问题和解决方案 -
服务器历史数据 -
个人偏好
示例:在 MEMORY.md 中加入:
## 服务器运维记录### 常见问题- CPU 100%:通常是 Node.js 死循环,重启 pm2- 内存泄漏:检查日志中的 "out of memory",重启服务- 磁盘满:清理 /var/log 和 /tmp### 个人偏好- 告警时间:工作日 9:00-18:00- 告警频率:同类型问题 1 小时内不重复告警
10.2 加入自定义 Skill
把常用操作封装成 Skill:
示例:创建 server-health Skill
skills/server-health/├── SKILL.md # 技能说明├── scripts/│ ├── check.sh # 检查脚本│ ├── fix.sh # 修复脚本│ └── report.sh # 报告脚本└── references/└── common-issues.md # 常见问题库
10.3 加入 MCP 扩展
通过 MCP 协议连接更多工具:
-
数据库监控 -
云服务 API -
监控平台(Prometheus、Grafana)
十一、踩坑指南
11.1 SSH 免密登录配置
问题:执行远程脚本时提示输入密码
解决:配置 SSH 免密登录
# 生成密钥对ssh-keygen -t rsa -b 4096# 复制公钥到服务器ssh-copy-id user@your-server.com# 测试ssh user@your-server.com "echo 'SSH OK'"
11.2 cron 时区问题
问题:任务比预期早/晚 8 小时
解决:检查时区
# 查看系统时区date +%z# 输出:+0800# 使用正确的 ISO 时间# 错误:2026-05-08T09:00:00# 正确:2026-05-08T09:00:00+08:00
11.3 脚本执行权限
问题:提示 “Permission denied”
解决:添加执行权限
chmod +x ~/scripts/*.sh
11.4 日志文件不存在
问题:grep 报错 “No such file”
解决:先创建文件
touch ~/logs/server.logtouch ~/logs/alerts.log
十二、最佳实践
12.1 告警分级
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
12.2 静默时段
避免深夜告警打扰:
{"message": "如果是 23:00-08:00,只记录日志不告警。其他时间正常告警。"}
12.3 失败重试
配置任务失败时的重试策略:
{"job": {..."failureAlert": {"mode": "announce","after": 2}}}
含义:失败 2 次后才告警,避免误报。
十三、效果验证
13.1 模拟服务器故障
# 临时停止服务sudo systemctl stop nginx# 等待下一次检查(最多 1 小时)# 或手动触发:openclaw cron run <jobId>
预期效果:
-
收到告警:服务器异常,正在尝试自动修复 -
收到修复结果:重启成功/失败 -
收到最终状态:服务器已恢复/需要人工介入
13.2 检查日志
# 查看监控日志tail -f ~/logs/server.log# 查看告警日志tail -f ~/logs/alerts.log
十四、总结
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
从零到一的完整路径:
需求分析 → 脚本编写 → 定时任务配置 → 子 Agent 集成 → 测试验证 → 持续优化
下一步方向:
-
加入更多监控维度(内存、磁盘、网络) -
接入云服务 API(阿里云、腾讯云) -
搭建可视化监控面板(Grafana)
系列文章完结
至此,OpenClaw 系列文章全部完成:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
从认识 OpenClaw,到用它解决实际问题,希望这个系列对你有帮助。
点点赞和关注不迷路,后续还会分享更多 AI 效率工具。
👨💻 H先生出品 | 专注 AI 工具与效率提升
夜雨聆风