| set -e | |
| # 捕获信号以优雅关闭 | |
| trap "echo '收到终止信号,正在关闭后台任务...'; kill -TERM '$CHILD_PID' 2>/dev/null; exit 0" SIGTERM SIGINT | |
| echo "--- [Start] 初始化 OpenClaw 环境 ---" | |
| # 1. 数据恢复 | |
| echo "--- [Start] 执行数据恢复 ---" | |
| python3 /usr/local/bin/sync.py restore | |
| # 2. 验证配置json | |
| echo "--- [Start] 验证配置openclaw.json ---" | |
| if command -v jq &> /dev/null; then | |
| if ! jq empty "/root/.openclaw/openclaw.json" 2>/dev/null; then | |
| echo "警告: 配置的 openclaw.json 可能格式有误,请检查配置。" | |
| cat "/root/.openclaw/openclaw.json" | |
| else | |
| echo "配置文件格式有效。" | |
| fi | |
| fi | |
| # 3. 更新 | |
| echo "--- [Start] 检查更新 ---" | |
| openclaw update --yes --no-restart | |
| # 4. 启动后台任务 | |
| echo "--- [Start] 启动后台守护进程 ---" | |
| { | |
| sleep 10 | |
| # 后台单独执行 Telegram DNS判断 | |
| /usr/local/bin/telegram-dns-check.sh | |
| } & | |
| ( | |
| sleep 60 | |
| # 任务 A: 自动批准 (每 10 分钟 = 600 秒) | |
| while true; do | |
| echo "[Cron] 执行设备自动批准..." | |
| python3 /usr/local/bin/pending.py | |
| sleep 600 | |
| done | |
| ) & | |
| PID_APPROVE=$! | |
| ( | |
| # 任务 B: 数据备份 (每 10 小时 = 36000 秒) | |
| # 先等待一小会儿再开始第一次备份,避免启动瞬间占用资源 | |
| sleep 610 | |
| while true; do | |
| echo "[Cron] 执行数据备份..." | |
| python3 /usr/local/bin/sync.py backup | |
| sleep 36000 | |
| done | |
| ) & | |
| PID_BACKUP=$! | |
| # 记录子进程 ID 用于信号处理 | |
| CHILD_PID="$PID_APPROVE $PID_BACKUP" | |
| # 5. 运行诊断修复 | |
| #echo "--- [Start] 运行 Doctor 修复 ---" | |
| #openclaw doctor --fix || echo "--- [Warning] Doctor 修复完成但有警告 ---" | |
| # 6. 启动主服务 | |
| echo "--- [Start] 启动 OpenClaw Gateway (端口: ${PORT}) ---" | |
| # exec 替换当前 shell,使 openclaw 成为 PID 1,便于接收信号 | |
| exec openclaw gateway run --port ${PORT} |