syw1516 commited on
Commit
e9ac9d5
·
verified ·
1 Parent(s): 4b732e7

Update scripts/openclaw-entrypoint.sh

Browse files
Files changed (1) hide show
  1. scripts/openclaw-entrypoint.sh +89 -95
scripts/openclaw-entrypoint.sh CHANGED
@@ -1,122 +1,116 @@
 
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
4
- # OpenClaw HF Spaces 启动脚本 - 包含数据恢复和备份
5
- # 确保聊天数据不丢失
6
-
7
  OPENCLAW_USER="${OPENCLAW_USER:-root}"
8
  OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
9
  OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-${OPENCLAW_STATE_DIR}/workspace}"
10
  OPENCLAW_GATEWAY_PORT="${OPENCLAW_GATEWAY_PORT:-7860}"
11
 
12
- # 备份配置
13
  BACKUP_ENABLED="${OPENCLAW_BACKUP_ENABLED:-true}"
14
  HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
15
  BACKUP_DATASET_REPO="${OPENCLAW_BACKUP_DATASET_REPO:-}"
16
 
17
- # 创建日志目录
18
  mkdir -p /var/log/openclaw
19
-
20
- # 创建必要的目录结构
21
  mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
22
 
23
  log_info() {
24
- echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
25
  }
26
 
27
- # 恢复数据(如果存在备份)
28
  restore_if_exists() {
29
- if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
30
- log_info "未配置备份,跳过恢复步骤"
31
- return 0
32
- fi
33
-
34
- log_info "检查备份数据..."
35
-
36
- RESTORE_TEMP=$(mktemp -d)
37
-
38
- if huggingface-cli download "${BACKUP_DATASET_REPO}" \
39
- --repo-type dataset \
40
- --token "${HF_TOKEN}" \
41
- --local-dir "${RESTORE_TEMP}" \
42
- 2>/dev/null; then
43
-
44
- log_info "找到备份,开始恢复数据..."
45
-
46
- if [[ -d "${RESTORE_TEMP}/workspace" ]]; then
47
- cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
48
- fi
49
-
50
- if [[ -d "${RESTORE_TEMP}/agents" ]]; then
51
- cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
52
- fi
53
-
54
- if [[ -d "${RESTORE_TEMP}/identity" ]]; then
55
- cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
56
- fi
57
-
58
- log_info "数据恢复完成"
59
- else
60
- log_info "未找到备份或下载失败,跳过恢复"
61
- fi
62
-
63
- rm -rf "${RESTORE_TEMP}"
64
  }
65
 
66
- # 备份数据(启动时备份一次)
67
  backup_on_start() {
68
- if [[ "${BACKUP_ENABLED}" != "true" ]]; then
69
- return 0
70
- fi
71
-
72
- if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
73
- log_info "未配置备份,跳过启动备份"
74
- return 0
75
- fi
76
-
77
- log_info "执行启动备份..."
78
-
79
- BACKUP_TEMP=$(mktemp -d)
80
-
81
- cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
82
- cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
83
- cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
84
-
85
- echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
86
-
87
- if huggingface-cli upload "${BACKUP_DATASET_REPO}" \
88
- "${BACKUP_TEMP}/" \
89
- --repo-type dataset \
90
- --token "${HF_TOKEN}" \
91
- --commit-message "Auto-backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" \
92
- 2>/dev/null; then
93
- log_info "启动备份完成"
94
- else
95
- log_info "启动备份失败(继续启动)"
96
- fi
97
-
98
- rm -rf "${BACKUP_TEMP}"
99
  }
100
 
101
- # 主启动流程
102
- main() {
103
- log_info "===== OpenClaw 启动 ====="
104
- log_info "状态目录: ${OPENCLAW_STATE_DIR}"
105
- log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
106
-
107
- # 1. 尝试恢复数据
108
- restore_if_exists
109
-
110
- # 2. 启动时备份
111
- backup_on_start
112
-
113
- # 3. 设置默认模型(支持环境变量覆盖)
114
- export RAW_MODEL="${RAW_MODEL:-z-ai/glm4.7}"
115
-
116
- # 4. 启动 OpenClaw
117
- log_info "启动 OpenClaw 网关..."
118
- exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
 
121
- main "$@"
 
 
 
 
 
 
 
 
 
 
 
122
 
 
 
1
+
2
  #!/usr/bin/env bash
3
  set -euo pipefail
4
 
 
 
 
5
  OPENCLAW_USER="${OPENCLAW_USER:-root}"
6
  OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
7
  OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-${OPENCLAW_STATE_DIR}/workspace}"
8
  OPENCLAW_GATEWAY_PORT="${OPENCLAW_GATEWAY_PORT:-7860}"
9
 
 
10
  BACKUP_ENABLED="${OPENCLAW_BACKUP_ENABLED:-true}"
11
  HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
12
  BACKUP_DATASET_REPO="${OPENCLAW_BACKUP_DATASET_REPO:-}"
13
 
 
14
  mkdir -p /var/log/openclaw
 
 
15
  mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
16
 
17
  log_info() {
18
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
19
  }
20
 
 
21
  restore_if_exists() {
22
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
23
+ log_info "未配置备份,跳过恢复步骤"
24
+ return 0
25
+ fi
26
+ log_info "检查备份数据..."
27
+ RESTORE_TEMP=$(mktemp -d)
28
+ if huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${RESTORE_TEMP}" 2>/dev/null; then
29
+ log_info "找到备份,开始恢复数据..."
30
+ [[ -d "${RESTORE_TEMP}/workspace" ]] && cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
31
+ [[ -d "${RESTORE_TEMP}/agents" ]] && cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
32
+ [[ -d "${RESTORE_TEMP}/identity" ]] && cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
33
+ log_info "数据恢复完成"
34
+ else
35
+ log_info "未找到备份或下载失败,跳过恢复"
36
+ fi
37
+ rm -rf "${RESTORE_TEMP}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
 
 
40
  backup_on_start() {
41
+ if [[ "${BACKUP_ENABLED}" != "true" ]]; then
42
+ return 0
43
+ fi
44
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
45
+ log_info "未配置备份,跳过启动备份"
46
+ return 0
47
+ fi
48
+ log_info "执行启动备份..."
49
+ BACKUP_TEMP=$(mktemp -d)
50
+ cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
51
+ cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
52
+ cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
53
+ echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
54
+ 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
55
+ log_info "启动备份完成"
56
+ else
57
+ log_info "启动备份失败(继续启动)"
58
+ fi
59
+ rm -rf "${BACKUP_TEMP}"
 
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
 
62
+ # ★★★ 关键:初始化配置文件 ★★★
63
+ init_config() {
64
+ local config_file="${OPENCLAW_STATE_DIR}/openclaw.json"
65
+ log_info "初始化 OpenClaw 配置..."
66
+ cat > "${config_file}" <<'EOFCONFIG'
67
+ {
68
+ "meta": {
69
+ "lastTouchedVersion": "2026.5.6"
70
+ },
71
+ "gateway": {
72
+ "mode": "local",
73
+ "bind": "lan",
74
+ "auth": {
75
+ "mode": "token",
76
+ "token": "CUSTOM_GATEWAY_TOKEN_PLACEHOLDER"
77
+ },
78
+ "controlUi": {
79
+ "allowedOrigins": ["*"]
80
+ }
81
+ },
82
+ "agents": {
83
+ "defaults": {
84
+ "model": {
85
+ "primary": "PLACEHOLDER_MODEL"
86
+ }
87
+ }
88
+ }
89
+ }
90
+ EOFCONFIG
91
+
92
+ # 在 Dockerfile 里用 sed 替换这两个占位符
93
+ # 这里用环境变量注入,适配 HF Space Settings
94
+ if [[ -n "${CUSTOM_GATEWAY_TOKEN:-}" ]]; then
95
+ sed -i "s/CUSTOM_GATEWAY_TOKEN_PLACEHOLDER/${CUSTOM_GATEWAY_TOKEN}/" "${config_file}"
96
+ fi
97
+ if [[ -n "${RAW_MODEL:-}" ]]; then
98
+ sed -i "s/PLACEHOLDER_MODEL/${RAW_MODEL}/" "${config_file}"
99
+ fi
100
+ log_info "配置初始化完成"
101
  }
102
 
103
+ main() {
104
+ log_info "===== OpenClaw 启动 ====="
105
+ log_info "状态目录: ${OPENCLAW_STATE_DIR}"
106
+ log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
107
+
108
+ init_config # ★ 关键:生成稳定 token 的 config
109
+ restore_if_exists
110
+ backup_on_start
111
+
112
+ log_info "启动 OpenClaw 网关..."
113
+ exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}"
114
+ }
115
 
116
+ main "$@"