#!/bin/bash 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}