openclaw2 / scripts /openclaw-entrypoint.sh
syw1516's picture
Update scripts/openclaw-entrypoint.sh
9825525 verified
#!/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 "$@"