syw1516 commited on
Commit
4986cd9
·
verified ·
1 Parent(s): a9b3b44

Update scripts/openclaw-entrypoint.sh

Browse files
Files changed (1) hide show
  1. scripts/openclaw-entrypoint.sh +120 -4
scripts/openclaw-entrypoint.sh CHANGED
@@ -1,13 +1,129 @@
 
 
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
4
- # 设置环境变量
 
 
 
5
  OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
 
6
  OPENCLAW_GATEWAY_PORT="${OPENCLAW_GATEWAY_PORT:-7860}"
7
 
 
 
 
 
 
 
 
 
8
  # 创建必要的目录结构
9
- mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- # 启动OpenClaw网关
12
- exec openclaw gateway --bind 0.0.0.0 --port "${OPENCLAW_GATEWAY_PORT}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
 
 
1
+
2
+
3
  #!/usr/bin/env bash
4
  set -euo pipefail
5
 
6
+ # OpenClaw HF Spaces 启动脚本 - 包含数据恢复和备份
7
+ # 确保聊天数据不丢失
8
+
9
+ OPENCLAW_USER="${OPENCLAW_USER:-root}"
10
  OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
11
+ OPENCLAW_WORKSPACE_DIR="${OPENCLAW_WORKSPACE_DIR:-${OPENCLAW_STATE_DIR}/workspace}"
12
  OPENCLAW_GATEWAY_PORT="${OPENCLAW_GATEWAY_PORT:-7860}"
13
 
14
+ # 备份配置
15
+ BACKUP_ENABLED="${OPENCLAW_BACKUP_ENABLED:-true}"
16
+ HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
17
+ BACKUP_DATASET_REPO="${OPENCLAW_BACKUP_DATASET_REPO:-}"
18
+
19
+ # 创建日志目录
20
+ mkdir -p /var/log/openclaw
21
+
22
  # 创建必要的目录结构
23
+ mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
24
+
25
+ log_info() {
26
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
27
+ }
28
+
29
+ # 恢复数据(如果存在备份)
30
+ restore_if_exists() {
31
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
32
+ log_info "未配置备份,跳过恢复步骤"
33
+ return 0
34
+ fi
35
+
36
+ log_info "检查备份数据..."
37
+
38
+ # 创建临时目录用于下载
39
+ RESTORE_TEMP=$(mktemp -d)
40
+
41
+ # 尝试下载最新备份
42
+ if huggingface-cli download "${BACKUP_DATASET_REPO}" \
43
+ --repo-type dataset \
44
+ --token "${HF_TOKEN}" \
45
+ --local-dir "${RESTORE_TEMP}" \
46
+ 2>/dev/null; then
47
+
48
+ log_info "找到备份,开始恢复数据..."
49
+
50
+ # 恢复工作区数据
51
+ if [[ -d "${RESTORE_TEMP}/workspace" ]]; then
52
+ cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
53
+ fi
54
+
55
+ # 恢复代理数据
56
+ if [[ -d "${RESTORE_TEMP}/agents" ]]; then
57
+ cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
58
+ fi
59
+
60
+ # 恢复身份数据
61
+ if [[ -d "${RESTORE_TEMP}/identity" ]]; then
62
+ cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
63
+ fi
64
+
65
+ log_info "数据恢复完成"
66
+ else
67
+ log_info "未找到备份或下载失败,跳过恢复"
68
+ fi
69
+
70
+ rm -rf "${RESTORE_TEMP}"
71
+ }
72
+
73
+ # 备份数据(启动时备份一次)
74
+ backup_on_start() {
75
+ if [[ "${BACKUP_ENABLED}" != "true" ]]; then
76
+ return 0
77
+ fi
78
+
79
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
80
+ log_info "未配置备份,跳过启动备份"
81
+ return 0
82
+ fi
83
+
84
+ log_info "执行启动备份..."
85
+
86
+ # 创建临时备份目录
87
+ BACKUP_TEMP=$(mktemp -d)
88
+
89
+ # 复制数据到临时目录
90
+ cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
91
+ cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
92
+ cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
93
+
94
+ # 创建备份信息
95
+ echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
96
+
97
+ # 上传到Hugging Face
98
+ if huggingface-cli upload "${BACKUP_DATASET_REPO}" \
99
+ "${BACKUP_TEMP}/" \
100
+ --repo-type dataset \
101
+ --token "${HF_TOKEN}" \
102
+ --commit-message "Auto-backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" \
103
+ 2>/dev/null; then
104
+ log_info "启动备份完成"
105
+ else
106
+ log_info "启动备份失败(继续启动)"
107
+ fi
108
+
109
+ rm -rf "${BACKUP_TEMP}"
110
+ }
111
 
112
+ # 启动流程
113
+ main() {
114
+ log_info "===== OpenClaw 启动 ====="
115
+ log_info "状态目录: ${OPENCLAW_STATE_DIR}"
116
+ log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
117
+
118
+ # 1. 尝试恢复数据
119
+ restore_if_exists
120
+
121
+ # 2. 启动时备份
122
+ backup_on_start
123
+
124
+ # 3. 启动 OpenClaw
125
+ log_info "启动 OpenClaw 网关..."
126
+ exec openclaw gateway --bind 0.0.0.0 --port "${OPENCLAW_GATEWAY_PORT}"
127
+ }
128
 
129
+ main "$@"