$npx -y skills add chaterm/terminal-skills --skill maintenanceOpenClaw 运维与故障修复
| 1 | # OpenClaw 运维与故障修复 |
| 2 | |
| 3 | ## 概述 |
| 4 | OpenClaw 日常运维操作、备份恢复、故障修复和高可用管理指南。 |
| 5 | |
| 6 | ## 日常运维 |
| 7 | |
| 8 | ### 服务管理 |
| 9 | ```bash |
| 10 | # Systemd 方式 |
| 11 | systemctl start openclaw-server |
| 12 | systemctl stop openclaw-server |
| 13 | systemctl restart openclaw-server |
| 14 | systemctl status openclaw-server |
| 15 | |
| 16 | # 脚本方式 |
| 17 | /opt/openclaw/bin/openclaw-server.sh start |
| 18 | /opt/openclaw/bin/openclaw-server.sh stop |
| 19 | /opt/openclaw/bin/openclaw-server.sh restart |
| 20 | /opt/openclaw/bin/openclaw-server.sh status |
| 21 | |
| 22 | # Docker 方式 |
| 23 | docker-compose start |
| 24 | docker-compose stop |
| 25 | docker-compose restart |
| 26 | docker-compose ps |
| 27 | |
| 28 | # Kubernetes 方式 |
| 29 | kubectl rollout restart deployment/openclaw-server -n openclaw |
| 30 | kubectl scale deployment/openclaw-worker --replicas=5 -n openclaw |
| 31 | ``` |
| 32 | |
| 33 | ### 健康检查 |
| 34 | ```bash |
| 35 | # 服务健康检查 |
| 36 | curl -s http://localhost:8080/api/health | jq . |
| 37 | |
| 38 | # 集群健康检查 |
| 39 | curl -s http://localhost:8080/api/cluster/health | jq . |
| 40 | |
| 41 | # 自动化健康检查脚本 |
| 42 | #!/bin/bash |
| 43 | HEALTH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/api/health) |
| 44 | if [ "$HEALTH" != "200" ]; then |
| 45 | echo "OpenClaw 服务异常,状态码: $HEALTH" |
| 46 | # 发送告警 |
| 47 | curl -X POST https://webhook.example.com/alert \ |
| 48 | -H "Content-Type: application/json" \ |
| 49 | -d '{"message": "OpenClaw 服务异常"}' |
| 50 | fi |
| 51 | ``` |
| 52 | |
| 53 | ### 日志管理 |
| 54 | ```bash |
| 55 | # 日志轮转配置 |
| 56 | cat > /etc/logrotate.d/openclaw << 'EOF' |
| 57 | /opt/openclaw/logs/*.log { |
| 58 | daily |
| 59 | rotate 30 |
| 60 | compress |
| 61 | delaycompress |
| 62 | missingok |
| 63 | notifempty |
| 64 | create 644 openclaw openclaw |
| 65 | postrotate |
| 66 | systemctl reload openclaw-server > /dev/null 2>&1 || true |
| 67 | endscript |
| 68 | } |
| 69 | EOF |
| 70 | |
| 71 | # 手动清理日志 |
| 72 | find /opt/openclaw/logs -name "*.log.*" -mtime +30 -delete |
| 73 | find /opt/openclaw/logs/tasks -name "*.log" -mtime +7 -delete |
| 74 | |
| 75 | # 日志归档 |
| 76 | tar -czf /backup/openclaw-logs-$(date +%Y%m%d).tar.gz /opt/openclaw/logs/ |
| 77 | ``` |
| 78 | |
| 79 | ## 备份与恢复 |
| 80 | |
| 81 | ### 数据库备份 |
| 82 | ```bash |
| 83 | # 全量备份 |
| 84 | mysqldump -h localhost -u openclaw -p \ |
| 85 | --single-transaction \ |
| 86 | --routines \ |
| 87 | --triggers \ |
| 88 | openclaw > /backup/openclaw_$(date +%Y%m%d_%H%M%S).sql |
| 89 | |
| 90 | # 压缩备份 |
| 91 | mysqldump -h localhost -u openclaw -p openclaw | gzip > /backup/openclaw_$(date +%Y%m%d).sql.gz |
| 92 | |
| 93 | # 定时备份脚本 |
| 94 | #!/bin/bash |
| 95 | BACKUP_DIR="/backup/mysql" |
| 96 | DATE=$(date +%Y%m%d_%H%M%S) |
| 97 | mkdir -p $BACKUP_DIR |
| 98 | |
| 99 | mysqldump -h localhost -u openclaw -p$MYSQL_PASSWORD \ |
| 100 | --single-transaction \ |
| 101 | openclaw | gzip > $BACKUP_DIR/openclaw_$DATE.sql.gz |
| 102 | |
| 103 | # 清理 7 天前的备份 |
| 104 | find $BACKUP_DIR -name "openclaw_*.sql.gz" -mtime +7 -delete |
| 105 | |
| 106 | echo "备份完成: $BACKUP_DIR/openclaw_$DATE.sql.gz" |
| 107 | ``` |
| 108 | |
| 109 | ### 数据库恢复 |
| 110 | ```bash |
| 111 | # 停止服务 |
| 112 | systemctl stop openclaw-server |
| 113 | |
| 114 | # 恢复数据库 |
| 115 | gunzip < /backup/openclaw_20240115.sql.gz | mysql -h localhost -u openclaw -p openclaw |
| 116 | |
| 117 | # 或直接恢复 |
| 118 | mysql -h localhost -u openclaw -p openclaw < /backup/openclaw_20240115.sql |
| 119 | |
| 120 | # 启动服务 |
| 121 | systemctl start openclaw-server |
| 122 | ``` |
| 123 | |
| 124 | ### 配置备份 |
| 125 | ```bash |
| 126 | # 备份配置文件 |
| 127 | tar -czf /backup/openclaw-config-$(date +%Y%m%d).tar.gz \ |
| 128 | /opt/openclaw/conf/ \ |
| 129 | /etc/systemd/system/openclaw*.service |
| 130 | |
| 131 | # Docker 配置备份 |
| 132 | tar -czf /backup/openclaw-docker-config-$(date +%Y%m%d).tar.gz \ |
| 133 | /opt/openclaw/docker-compose.yml \ |
| 134 | /opt/openclaw/.env \ |
| 135 | /opt/openclaw/config/ |
| 136 | ``` |
| 137 | |
| 138 | ### 完整备份 |
| 139 | ```bash |
| 140 | #!/bin/bash |
| 141 | # full_backup.sh - 完整备份脚本 |
| 142 | |
| 143 | BACKUP_DIR="/backup/openclaw/$(date +%Y%m%d)" |
| 144 | mkdir -p $BACKUP_DIR |
| 145 | |
| 146 | echo "开始备份..." |
| 147 | |
| 148 | # 1. 备份数据库 |
| 149 | echo "备份数据库..." |
| 150 | mysqldump -h localhost -u openclaw -p$DB_PASSWORD \ |
| 151 | --single-transaction openclaw | gzip > $BACKUP_DIR/database.sql.gz |
| 152 | |
| 153 | # 2. 备份配置 |
| 154 | echo "备份配置文件..." |
| 155 | tar -czf $BACKUP_DIR/config.tar.gz /opt/openclaw/conf/ |
| 156 | |
| 157 | # 3. 备份 Redis (如需要) |
| 158 | echo "备份 Redis..." |
| 159 | redis-cli -h localhost BGSAVE |
| 160 | sleep 5 |
| 161 | cp /var/lib/redis/dump.rdb $BACKUP_DIR/redis.rdb |
| 162 | |
| 163 | # 4. 生成备份清单 |
| 164 | echo "生成备份清单..." |
| 165 | cat > $BACKUP_DIR/manifest.txt << EOF |
| 166 | 备份时间: $(date) |
| 167 | 数据库: database.sql.gz |
| 168 | 配置: config.tar.gz |
| 169 | Redis: redis.rdb |
| 170 | OpenClaw 版本: $(curl -s http://localhost:8080/api/version | jq -r .version) |
| 171 | EOF |
| 172 | |
| 173 | echo "备份完成: $BACKUP_DIR" |
| 174 | ``` |
| 175 | |
| 176 | ## 故障修复 |
| 177 | |
| 178 | ### 服务无法启动 |
| 179 | |
| 180 | #### 端口占用 |
| 181 | ```bash |
| 182 | # 检查端口占用 |
| 183 | netstat -tlnp | grep -E "8080|9090" |
| 184 | lsof -i :8080 |
| 185 | |
| 186 | # 杀死占用进程 |
| 187 | kill -9 $(lsof -t -i :8080) |
| 188 | |
| 189 | # 或修改配置使用其他端口 |
| 190 | vim /opt/openclaw/conf/application.yml |
| 191 | # 修改 server.port |
| 192 | ``` |
| 193 | |
| 194 | #### 配置错误 |
| 195 | ```bash |
| 196 | # 检查配置语法 |
| 197 | /opt/openclaw/bin/openclaw-server.sh validate |
| 198 | |
| 199 | # 查看启动日志 |
| 200 | tail -100 /opt/openclaw/logs/openclaw-server.log |
| 201 | |
| 202 | # 常见配置问题 |
| 203 | # 1. YAML 格式错误 - 检查缩进 |
| 204 | # 2. 数据库连接字符串错误 |
| 205 | # 3. 环境变量未设置 |
| 206 | ``` |
| 207 | |
| 208 | #### 权限问题 |
| 209 | ```bash |
| 210 | # 修复目录权限 |
| 211 | chown -R openclaw:openclaw /opt/openclaw |
| 212 | chmod 755 /opt/openclaw/bin/*.sh |
| 213 | chmod 644 /opt/openclaw/conf/*.yml |
| 214 | |
| 215 | # 修复日志目录权限 |
| 216 | chown -R openclaw:openclaw /opt/openclaw/logs |
| 217 | chmod 755 /opt/openclaw/logs |
| 218 | ``` |
| 219 | |
| 220 | ### 数据库问题修复 |
| 221 | |
| 222 | #### 连接失败 |
| 223 | ```bash |
| 224 | # 测试连接 |
| 225 | mysql -h localhost -u openclaw -p -e "SELECT 1" |
| 226 | |
| 227 | # 重置密码 |
| 228 | mysql -u root -p << 'EOF' |
| 229 | ALTER USER 'openclaw'@'%' IDENTIFIED BY 'new_password'; |
| 230 | FLUSH PRIVILEGES; |
| 231 | EOF |
| 232 | |
| 233 | # 检查用户权限 |
| 234 | mysql -u root -p -e "SHOW GRANTS FOR 'openclaw'@'%'" |
| 235 | |
| 236 | # 修复权限 |
| 237 | mysql -u root -p << 'EOF' |
| 238 | GRANT ALL PRIVILEGES ON openclaw.* TO 'openclaw'@'%'; |
| 239 | FLUSH PRIVILEGES; |
| 240 | EOF |
| 241 | ``` |
| 242 | |
| 243 | #### 表损坏修复 |
| 244 | ```bash |
| 245 | # 检查表状态 |
| 246 | mysqlcheck -u root -p --check openclaw |
| 247 | |
| 248 | # 修复表 |
| 249 | mysqlcheck -u root -p --repair openclaw |
| 250 | |
| 251 | # 修复特定表 |
| 252 | mysqlcheck -u root -p --repair openclaw task |
| 253 | mysq |