File size: 4,061 Bytes
ca8354c 4986cd9 37215eb 4986cd9 ca8354c 4986cd9 43a222e 4986cd9 43a222e 4986cd9 f31c67c 4986cd9 f31c67c 4986cd9 ca8354c e9ac9d5 f31c67c e9ac9d5 f31c67c e9ac9d5 f31c67c 4986cd9 9be0274 e9ac9d5 f31c67c e9ac9d5 f31c67c e9ac9d5 f31c67c e9ac9d5 4978696 e480646 9825525 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #!/usr/bin/env bash
set -euo pipefail
OPENCLAW_USER="${OPENCLAW_USER:-root}"
OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-${OPENCLAW_STATE_DIR}/workspace}"
OPENCLAW_GATEWAY_PORT="${OPENCLAW_GATEWAY_PORT:-7860}"
BACKUP_ENABLED="${OPENCLAW_BACKUP_ENABLED:-true}"
HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
BACKUP_DATASET_REPO="${BACKUP_DATASET_REPO:-}"
mkdir -p /var/log/openclaw
mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
log_info() {
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
}
restore_if_exists() {
if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
log_info "未配置备份,跳过恢复步骤"
return 0
fi
log_info "检查备份数据..."
RESTORE_TEMP=$(mktemp -d)
if huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${RESTORE_TEMP}" 2>/dev/null; then
log_info "找到备份,开始恢复数据..."
[[ -d "${RESTORE_TEMP}/workspace" ]] && cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
[[ -d "${RESTORE_TEMP}/agents" ]] && cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
[[ -d "${RESTORE_TEMP}/identity" ]] && cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
log_info "数据恢复完成"
else
log_info "未找到备份或下载失败,跳过恢复"
fi
rm -rf "${RESTORE_TEMP}"
}
backup_on_start() {
if [[ "${BACKUP_ENABLED}" != "true" ]]; then
return 0
fi
if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
log_info "未配置备份,跳过启动备份"
return 0
fi
log_info "执行启动备份..."
BACKUP_TEMP=$(mktemp -d)
cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
if huggingface-cli upload "${BACKUP_DATASET_REPO}" "${BACKUP_TEMP}/" --repo-type dataset --token "${HF_TOKEN}" --commit-message "Auto-backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" 2>/dev/null; then
log_info "启动备份完成"
else
log_info "启动备份失败(继续启动)"
fi
rm -rf "${BACKUP_TEMP}"
}
init_config() {
local config_file="${OPENCLAW_STATE_DIR}/openclaw.json"
log_info "初始化 OpenClaw 配置..."
cat > "${config_file}" <<'EOFCONFIG'
{
"meta": {
"lastTouchedVersion": "2026.5.6"
},
"gateway": {
"mode": "local",
"bind": "lan",
"auth": {
"mode": "token",
"token": "CUSTOM_GATEWAY_TOKEN_PLACEHOLDER"
},
"controlUi": {
"allowedOrigins": ["*"],
"dangerouslyDisableDeviceAuth": true,
"allowInsecureAuth": true
},
"devicePairing": {
"required": false
}
},
"agents": {
"defaults": {
"model": {
"primary": "PLACEHOLDER_MODEL"
}
}
}
}
EOFCONFIG
sed -i "s/CUSTOM_GATEWAY_TOKEN_PLACEHOLDER/${OPENCLAW_GATEWAY_TOKEN:-}/" "${config_file}"
sed -i "s/PLACEHOLDER_MODEL/${RAW_MODEL:-z-ai\/glm4.7}/" "${config_file}"
log_info "配置初始化完成"
}
main() {
log_info "===== OpenClaw 启动 ====="
log_info "状态目录: ${OPENCLAW_STATE_DIR}"
log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
init_config
restore_if_exists
backup_on_start
log_info "启动 OpenClaw 网关..."
exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}" --token "${OPENCLAW_GATEWAY_TOKEN}"
}
main "$@"
|