
1. OpenClaw技能开发实战构建进程监控与自恢复系统最近在部署OpenClaw智能体系统时遇到一个典型的生产环境问题关键后台进程经常意外退出导致服务中断。经过多次手动恢复的折磨后我决定利用OpenClaw的Skill开发功能创建一个自动化进程监控解决方案。本文将完整记录从需求分析到最终实现的整个过程。2. 环境准备与基础配置2.1 硬件与基础环境我的测试环境配置如下计算卡2张NVIDIA RTX 3090基础大模型qwen3.5:27b操作系统Ubuntu 20.04 LTS这个配置能够很好地支持OpenClaw的运行需求特别是处理多个并发进程时的性能要求。选择3090显卡是因为其24GB显存足以应对大多数中等规模的模型推理任务。2.2 OpenClaw基础部署OpenClaw的本地部署相对简单但有几个关键点需要注意Python环境建议使用conda隔离需要正确配置CUDA驱动以支持GPU加速工作目录权限要设置合理我使用的Python环境路径为/home/tc/anaconda3/envs/openclaw/bin/python33. 技能需求分析与设计3.1 核心需求场景我们需要监控三个关键进程rolo_simulator.py - 机器人模拟器核心ai_chat.py - AI对话服务agent_collector.py - 数据采集服务这些进程需要满足以下要求持续运行不中断单实例运行rolo_simulator.py特别重要异常时自动恢复3.2 技术方案选型经过评估我选择了shell脚本作为实现基础因为直接与系统进程交互效率最高对OpenClaw环境依赖最小方便通过cron实现定时任务监控策略设计每分钟检查一次进程状态使用ps aux命令获取进程列表对rolo_simulator.py实施特殊处理单实例保证4. 技能实现细节4.1 核心监控脚本解析bootup_monitor.sh是技能的核心其主要逻辑包括#!/bin/bash # 加载配置文件 CONFIG_FILE/home/tc/.openclaw/workspace/skills/agent-bootup/config.json # 检查进程状态函数 check_process() { local process_name$1 local max_instances$2 local kill_extra$3 # 获取进程列表 pids$(pgrep -f $process_name) # ...后续处理逻辑 } # 主检查函数 main_check() { # 从config.json读取配置 # 对每个配置的进程执行检查 # 根据检查结果执行相应操作 }4.2 配置文件设计config.json采用分层设计{ monitoring: { enabled: true, intervalSeconds: 60, autoRecovery: true }, processes: [ { name: rolo_simulator.py, maxInstances: 1, killExtraInstances: true, startCommand: nohup /path/to/python /path/to/rolo_simulator.py } // 其他进程配置... ] }这种设计使得监控参数可灵活调整每个进程可以独立配置启动命令明确指定5. 关键功能实现5.1 进程状态检查实现细节# 获取特定进程的实例数 count$(ps aux | grep -v grep | grep -c $process_name) # 获取进程PID列表 pids$(pgrep -f $process_name)5.2 多实例处理对于rolo_simulator.py的多实例情况if [ $count -gt $max_instances ]; then # 按启动时间排序保留最老的 oldest_pid$(get_oldest_pid $pids) # 杀死其他实例 for pid in $pids; do if [ $pid -ne $oldest_pid ]; then kill -9 $pid fi done fi5.3 进程恢复机制当进程不存在时if [ $count -eq 0 ]; then eval $start_command # 记录日志 log 启动进程: $process_name fi6. 系统集成与部署6.1 目录结构规范技能的标准目录结构skills/agent-bootup/ ├── SKILL.md # 技能元数据 ├── bootup_monitor.sh # 主脚本 ├── config.json # 配置文件 └── README.md # 使用文档6.2 定时任务配置生产环境推荐使用cron# 编辑crontab crontab -e # 添加每分钟检查 * * * * * /bin/bash /path/to/bootup_monitor.sh check /var/log/agent-bootup.log 216.3 权限设置确保脚本可执行chmod x bootup_monitor.sh7. 测试与验证7.1 手动测试流程停止某个监控进程手动执行检查脚本验证进程是否被正确恢复检查日志输出7.2 多实例测试特别针对rolo_simulator.py手动启动多个实例运行监控脚本确认只保留一个实例7.3 日志分析日志文件位置/home/tc/.openclaw/workspace/skills/agent-bootup/bootup_monitor.log典型日志内容[INFO] 2023-08-20 14:30:00 - 开始进程健康检查... [CHECK] rolo_simulator.py: ✓ 运行中 (PID: 12345) [CHECK] ai_chat.py: ✗ 未运行 → 启动中... [START] ai_chat.py 启动成功 (PID: 12346)8. 安全与异常处理8.1 风险控制措施进程终止前确认进程名完全匹配保留最老的进程实例启动命令使用全路径操作记录详细日志8.2 错误处理机制# 启动命令错误处理 if ! eval $start_command; then log 错误: 无法启动 $process_name exit 1 fi8.3 日志轮转配置使用logrotate管理日志/home/tc/.openclaw/workspace/skills/agent-bootup/bootup_monitor.log { daily rotate 7 compress missingok notifempty }9. 性能优化建议9.1 检查频率调整根据实际负载可以调整默认60秒适合大多数场景高负载时可延长至2-5分钟关键业务可缩短至30秒9.2 资源占用监控添加资源检查逻辑# 检查内存占用 mem_usage$(ps -p $pid -o %mem | tail -n 1) if (( $(echo $mem_usage 90 | bc -l) )); then log 警告: $process_name 内存占用过高 fi9.3 并行检查优化对于多个进程的检查可以使用# 使用并行检查提高效率 for process in ${processes[]}; do check_process $process done wait10. 实际应用效果10.1 稳定性提升部署后效果服务中断时间减少95%问题发现时间从小时级降到分钟级夜间无需人工值守10.2 运维效率对比数据指标部署前部署后人工干预次数/周15-200-2平均恢复时间15分钟1分钟故障发现延迟30分钟1分钟10.3 扩展应用基于此技能可以扩展资源监控告警自动扩容机制服务健康度评分11. 经验总结与技巧分享11.1 关键注意事项确保kill命令只针对目标进程启动命令使用绝对路径日志文件权限要正确cron环境变量问题11.2 调试技巧手动模拟进程退出kill -9 $(pgrep -f rolo_simulator.py)查看cron实际执行grep CRON /var/log/syslog测试环境变量env -i /bin/bash -c 你的命令11.3 扩展思路这个技能框架可以复用于其他服务的监控自定义健康检查自动化运维流程我在实际使用中发现将监控间隔设置为60秒是一个比较好的平衡点既能及时发现问题又不会给系统带来太大负担。对于特别关键的服务可以考虑缩短到30秒但要注意评估系统负载。