1. 项目概述
作为一名长期部署AI服务的工程师,我深知7×24小时稳定运行的重要性。最近在ZimaBoard上部署OpenClaw AI服务时,遇到断电后服务无法自动恢复的问题。经过多次实践,总结出一套完整的解决方案,今天就来分享这个能让OpenClaw实现开机自启、断电自动恢复的配置方案。
这个方案特别适合需要长期稳定运行的本地AI推理服务器场景。我们将从硬件配置到软件服务全方位保障OpenClaw的持续运行,即使遇到意外断电也能自动恢复。下面我会详细介绍每个环节的具体实现方法。
2. 系统基础配置
2.1 系统状态检查与准备
在开始配置前,我们需要先确认系统基础状态。ZimaBoard通常运行基于Linux的系统,以下命令可以帮助我们了解当前系统状况:
bash复制# 查看系统启动时间(精确到秒)
uptime -s
# 查看系统运行时长和负载
uptime
# 列出所有正在运行的系统服务
systemctl list-units --type=service --state=running
# 检查Docker服务状态(我们的OpenClaw将运行在Docker中)
systemctl status docker
提示:如果发现Docker服务未运行,需要先执行
sudo systemctl start docker启动服务,并使用sudo systemctl enable docker设置开机自启。
2.2 自动登录配置
为确保断电恢复后服务能自动启动,我们需要配置系统自动登录:
- 编辑getty服务配置:
bash复制sudo systemctl edit getty@tty1
- 添加以下内容:
code复制[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I $TERM
-
替换username为你的实际用户名
-
重新加载服务:
bash复制sudo systemctl daemon-reload
2.3 网络连接保障
稳定的网络连接对AI服务至关重要,配置网络自动重连:
bash复制# 查看当前网络连接状态
nmcli connection show
# 设置网络自动连接
nmcli connection modify "你的连接名" connection.autoconnect yes
3. Docker服务配置
3.1 Docker守护进程设置
首先确保Docker服务本身能自动启动并保持运行:
bash复制# 启用Docker开机自启
sudo systemctl enable docker
# 配置Docker守护进程重启策略
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"live-restore": true,
"restart": true
}
EOF
# 重启Docker使配置生效
sudo systemctl restart docker
3.2 OpenClaw容器配置
为OpenClaw容器配置自动重启策略:
dockerfile复制version: '3.8'
services:
openclaw:
image: openclaw/image:latest
restart: unless-stopped
volumes:
- ./data:/data
ports:
- "8080:8080"
关键参数说明:
restart: unless-stopped:除非明确停止,否则容器退出后会自动重启live-restore:允许Docker守护进程重启时不中断容器运行
注意:生产环境建议使用
restart: always策略,确保任何情况下容器退出都会自动重启。
4. Systemd服务管理
4.1 创建自定义服务文件
为了更精细地控制OpenClaw服务,我们创建systemd服务:
bash复制sudo tee /etc/systemd/system/openclaw.service <<EOF
[Unit]
Description=OpenClaw AI Service
After=docker.service
Requires=docker.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/docker-compose -f /path/to/your/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /path/to/your/docker-compose.yml down
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
EOF
4.2 服务启用与测试
bash复制# 重新加载systemd配置
sudo systemctl daemon-reload
# 启用服务开机自启
sudo systemctl enable openclaw
# 立即启动服务
sudo systemctl start openclaw
# 检查服务状态
sudo systemctl status openclaw
测试服务自动恢复:
bash复制# 模拟服务崩溃
sudo pkill -f "docker-compose"
# 观察服务是否自动恢复(约30秒后)
sudo systemctl status openclaw
5. 断电恢复机制
5.1 BIOS电源设置
- 进入ZimaBoard BIOS设置(启动时按Del或F2)
- 找到"电源管理"或"AC Recovery"选项
- 设置为"Power On"或"Always On"
- 保存并退出
这样当电源恢复时,设备会自动开机。
5.2 启动检测脚本
创建检测脚本确保所有服务正常启动:
bash复制sudo tee /usr/local/bin/check_services.sh <<EOF
#!/bin/bash
check_service() {
if ! systemctl is-active --quiet $1; then
echo "Service $1 is not running, attempting to restart..."
systemctl restart $1
fi
}
check_service docker
check_service openclaw
EOF
sudo chmod +x /usr/local/bin/check_services.sh
设置定时检查(每5分钟):
bash复制(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/check_services.sh") | crontab -
6. 监控与告警系统
6.1 基础监控配置
安装并配置Prometheus监控:
bash复制docker run -d --name=prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
示例prometheus.yml配置:
yaml复制global:
scrape_interval: 15s
scrape_configs:
- job_name: 'openclaw'
static_configs:
- targets: ['openclaw:8080']
6.2 告警规则设置
配置Alertmanager实现邮件告警:
yaml复制route:
receiver: 'email-alerts'
receivers:
- name: 'email-alerts'
email_configs:
- to: 'your-email@example.com'
from: 'alertmanager@yourdomain.com'
smarthost: 'smtp.example.com:587'
auth_username: 'your-email@example.com'
auth_password: 'your-password'
7. 常见问题与解决方案
7.1 服务启动失败排查
如果OpenClaw服务无法启动,按以下步骤排查:
- 检查Docker日志:
bash复制journalctl -u docker --no-pager -n 50
- 检查容器日志:
bash复制docker logs openclaw_container_name
- 检查端口冲突:
bash复制ss -tulnp | grep 8080
7.2 断电恢复后网络异常
如果恢复后发现网络连接问题:
- 重启网络服务:
bash复制sudo systemctl restart NetworkManager
- 检查网络接口:
bash复制ip addr show
- 重新应用网络配置:
bash复制nmcli connection up "你的连接名"
7.3 资源监控与优化
长期运行需监控资源使用:
bash复制# 实时查看系统资源
htop
# 查看Docker容器资源占用
docker stats
# 查看磁盘空间
df -h
建议设置资源限制:
dockerfile复制services:
openclaw:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
8. 进阶优化建议
8.1 日志轮转配置
防止日志文件过大:
bash复制sudo tee /etc/logrotate.d/openclaw <<EOF
/var/lib/docker/containers/*/*.log {
daily
rotate 7
compress
delaycompress
missingok
copytruncate
}
EOF
8.2 系统内核调优
提高系统稳定性:
bash复制# 增加文件描述符限制
echo "fs.file-max = 100000" | sudo tee -a /etc/sysctl.conf
# 增加网络连接数
echo "net.core.somaxconn = 65535" | sudo tee -a /etc/sysctl.conf
# 应用修改
sudo sysctl -p
8.3 备份与恢复策略
配置定期备份:
bash复制# 创建备份脚本
sudo tee /usr/local/bin/backup_openclaw.sh <<EOF
#!/bin/bash
tar -czvf /backups/openclaw_$(date +%Y%m%d).tar.gz /path/to/openclaw/data
EOF
# 设置每日备份
(crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/backup_openclaw.sh") | crontab -
这套配置在我的ZimaBoard上已经稳定运行了3个多月,期间经历过多次意外断电都能自动恢复。最关键的是要确保每个环节都有适当的恢复机制 - Docker容器重启策略、systemd服务监控、硬件级断电恢复三者缺一不可。