syw1516 commited on
Commit
f31c67c
·
verified ·
1 Parent(s): fec7fe2

Update scripts/openclaw-entrypoint.sh

Browse files
Files changed (1) hide show
  1. scripts/openclaw-entrypoint.sh +141 -84
scripts/openclaw-entrypoint.sh CHANGED
@@ -1,3 +1,5 @@
 
 
1
  #!/usr/bin/env bash
2
  set -euo pipefail
3
 
@@ -10,6 +12,8 @@ BACKUP_ENABLED="${OPENCLAW_BACKUP_ENABLED:-true}"
10
  HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
11
  BACKUP_DATASET_REPO="${BACKUP_DATASET_REPO:-}"
12
 
 
 
13
  mkdir -p /var/log/openclaw
14
  mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
15
 
@@ -17,106 +21,159 @@ log_info() {
17
  echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
18
  }
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  restore_if_exists() {
21
- if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
22
- log_info "未配置备份,跳过恢复步骤"
23
- return 0
24
- fi
25
- log_info "检查备份数据..."
26
- RESTORE_TEMP=$(mktemp -d)
27
- if huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${RESTORE_TEMP}" 2>/dev/null; then
28
- log_info "找到备份,开始恢复数据..."
29
- [[ -d "${RESTORE_TEMP}/workspace" ]] && cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
30
- [[ -d "${RESTORE_TEMP}/agents" ]] && cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
31
- [[ -d "${RESTORE_TEMP}/identity" ]] && cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
32
- log_info "数据恢复完成"
33
- else
34
- log_info "未找到备份或下载失败,跳过恢复"
35
- fi
36
- rm -rf "${RESTORE_TEMP}"
37
  }
38
 
39
  backup_on_start() {
40
- if [[ "${BACKUP_ENABLED}" != "true" ]]; then
41
- return 0
42
- fi
43
- if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
44
- log_info "未配置备份,跳过启动备份"
45
- return 0
46
- fi
47
- log_info "执行启动备份..."
48
- BACKUP_TEMP=$(mktemp -d)
49
- cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
50
- cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
51
- cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
52
- echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
53
- 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
54
- log_info "启动备份完成"
55
- else
56
- log_info "启动备份失败(继续启动)"
57
- fi
58
- rm -rf "${BACKUP_TEMP}"
59
  }
60
 
61
  init_config() {
62
- local config_file="${OPENCLAW_STATE_DIR}/openclaw.json"
63
- log_info "初始化 OpenClaw 配置..."
64
- cat > "${config_file}" <<'EOFCONFIG'
65
  {
66
- "meta": {
67
- "lastTouchedVersion": "2026.5.6"
68
- },
69
- "gateway": {
70
- "mode": "local",
71
- "bind": "lan",
72
- "auth": {
73
- "mode": "token",
74
- "token": "CUSTOM_GATEWAY_TOKEN_PLACEHOLDER"
75
- },
76
- "controlUi": {
77
- "allowedOrigins": ["*"],
78
- "dangerouslyDisableDeviceAuth": true,
79
- "allowInsecureAuth": true
80
- },
81
- "devicePairing": {
82
- "required": false
83
- }
84
- },
85
- "agents": {
86
- "defaults": {
87
- "model": {
88
- "primary": "PLACEHOLDER_MODEL"
89
- }
90
- }
91
- },
92
- "channels": {
93
- "weixin": {
94
- "enabled": true,
95
- "corpId": "wwdf06e4da02f37a0b",
96
- "agentId": "1000003",
97
- "secret": "2eVuCjsM83lXJ12nxoJG5uch677ZkOLHxew4zTPGGc8"
98
- }
99
- }
100
  }
101
  EOFCONFIG
102
 
103
- sed -i "s/CUSTOM_GATEWAY_TOKEN_PLACEHOLDER/${OPENCLAW_GATEWAY_TOKEN:-}/" "${config_file}"
104
- sed -i "s/PLACEHOLDER_MODEL/${RAW_MODEL:-z-ai\/glm4.7}/" "${config_file}"
105
- log_info "配置初始化完成"
106
  }
107
 
108
  main() {
109
- log_info "===== OpenClaw 启动 ====="
110
- log_info "状态目录: ${OPENCLAW_STATE_DIR}"
111
- log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
112
 
113
- init_config
114
- restore_if_exists
115
- backup_on_start
 
116
 
117
- log_info "启动 OpenClaw 网关..."
118
- exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}" --token "${OPENCLAW_GATEWAY_TOKEN}"
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
 
121
  main "$@"
122
-
 
1
+
2
+
3
  #!/usr/bin/env bash
4
  set -euo pipefail
5
 
 
12
  HF_TOKEN="${HF_TOKEN:-${HUGGINGFACE_HUB_TOKEN:-}}"
13
  BACKUP_DATASET_REPO="${BACKUP_DATASET_REPO:-}"
14
 
15
+ WEIXIN_QR_FILE="/tmp/weixin_qr_url.txt"
16
+
17
  mkdir -p /var/log/openclaw
18
  mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessions,logs,identity}
19
 
 
21
  echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log
22
  }
23
 
24
+ # ── 恢复微信登录 session ────────────────────────
25
+ restore_weixin_session() {
26
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
27
+ log_info "HF_TOKEN 或 BACKUP_DATASET_REPO 未设置,跳过微信 session 恢复"
28
+ return 0
29
+ fi
30
+ log_info "恢复微信登录 session..."
31
+ huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${OPENCLAW_STATE_DIR}" 2>/dev/null && log_info "微信 session 恢复完成" || log_info "无微信 session 可恢复"
32
+ }
33
+
34
+ # ── 备份微信登录 session ────────────────────────
35
+ backup_weixin_session() {
36
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
37
+ return 0
38
+ fi
39
+ log_info "备份微信登录 session..."
40
+ huggingface-cli upload "${BACKUP_DATASET_REPO}" "${OPENCLAW_STATE_DIR}" --repo-type dataset --token "${HF_TOKEN}" 2>/dev/null && log_info "微信 session 备份完成" || true
41
+ }
42
+
43
+ # ── 生成微信二维码 URL ──────────────────────────
44
+ generate_weixin_qr() {
45
+ log_info "正在获取微信二维码 URL..."
46
+ openclaw channels login --channel openclaw-weixin > "${WEIXIN_QR_FILE}" 2>&1 &
47
+ local LOGIN_PID=$!
48
+
49
+ for i in $(seq 1 30); do
50
+ if grep -q "ilinkai.weixin.qq.com" "${WEIXIN_QR_FILE}" 2>/dev/null; then
51
+ local QR_URL
52
+ QR_URL=$(grep "ilinkai.weixin.qq.com" "${WEIXIN_QR_FILE}" | head -1 | tr -d '[:space:]')
53
+ log_info "=========================================="
54
+ log_info "微信登录二维码 URL:"
55
+ log_info "${QR_URL}"
56
+ log_info "请在浏览器中打开此链接,用微信扫码登录"
57
+ log_info "=========================================="
58
+ return 0
59
+ fi
60
+ sleep 1
61
+ done
62
+ log_info "未能自动获取二维码 URL,请查看日志获取 ilinkai.weixin.qq.com 链接"
63
+ }
64
+
65
  restore_if_exists() {
66
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
67
+ log_info "未配置备份,跳过恢复步骤"
68
+ return 0
69
+ fi
70
+ log_info "检查备份数据..."
71
+ RESTORE_TEMP=$(mktemp -d)
72
+ if huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${RESTORE_TEMP}" 2>/dev/null; then
73
+ log_info "找到备份,开始恢复数据..."
74
+ [[ -d "${RESTORE_TEMP}/workspace" ]] && cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true
75
+ [[ -d "${RESTORE_TEMP}/agents" ]] && cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true
76
+ [[ -d "${RESTORE_TEMP}/identity" ]] && cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true
77
+ log_info "数据恢复完成"
78
+ else
79
+ log_info "未找到备份或下载失败,跳过恢复"
80
+ fi
81
+ rm -rf "${RESTORE_TEMP}"
82
  }
83
 
84
  backup_on_start() {
85
+ if [[ "${BACKUP_ENABLED}" != "true" ]]; then
86
+ return 0
87
+ fi
88
+ if [[ -z "${HF_TOKEN}" ]] || [[ -z "${BACKUP_DATASET_REPO}" ]]; then
89
+ log_info "未配置备份,跳过启动备份"
90
+ return 0
91
+ fi
92
+ log_info "执行启动备份..."
93
+ BACKUP_TEMP=$(mktemp -d)
94
+ cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true
95
+ cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true
96
+ cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true
97
+ echo "{\"backup_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"
98
+ 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
99
+ log_info "启动备份完成"
100
+ else
101
+ log_info "启动备份失败(继续启动)"
102
+ fi
103
+ rm -rf "${BACKUP_TEMP}"
104
  }
105
 
106
  init_config() {
107
+ local config_file="${OPENCLAW_STATE_DIR}/openclaw.json"
108
+ log_info "初始化 OpenClaw 配置..."
109
+ cat > "${config_file}" <<'EOFCONFIG'
110
  {
111
+ "meta": {
112
+ "lastTouchedVersion": "2026.5.6"
113
+ },
114
+ "gateway": {
115
+ "mode": "local",
116
+ "bind": "lan",
117
+ "auth": {
118
+ "mode": "token",
119
+ "token": "CUSTOM_GATEWAY_TOKEN_PLACEHOLDER"
120
+ },
121
+ "controlUi": {
122
+ "allowedOrigins": ["*"],
123
+ "dangerouslyDisableDeviceAuth": true,
124
+ "allowInsecureAuth": true
125
+ },
126
+ "devicePairing": {
127
+ "required": false
128
+ }
129
+ },
130
+ "plugins": {
131
+ "entries": {
132
+ "openclaw-weixin": {
133
+ "enabled": true
134
+ }
135
+ }
136
+ },
137
+ "agents": {
138
+ "defaults": {
139
+ "model": {
140
+ "primary": "PLACEHOLDER_MODEL"
141
+ }
142
+ }
143
+ }
 
144
  }
145
  EOFCONFIG
146
 
147
+ sed -i "s/CUSTOM_GATEWAY_TOKEN_PLACEHOLDER/${OPENCLAW_GATEWAY_TOKEN:-}/" "${config_file}"
148
+ sed -i "s/PLACEHOLDER_MODEL/${RAW_MODEL:-z-ai\/glm4.7}/" "${config_file}"
149
+ log_info "配置初始化完成"
150
  }
151
 
152
  main() {
153
+ log_info "===== OpenClaw 启动 ====="
154
+ log_info "状态目录: ${OPENCLAW_STATE_DIR}"
155
+ log_info "工作区目录: ${OPENCLAW_WORKSPACE_DIR}"
156
 
157
+ init_config
158
+ restore_weixin_session
159
+ restore_if_exists
160
+ backup_on_start
161
 
162
+ # 检查微信是否已登录
163
+ if openclaw channels status --channel openclaw-weixin 2>/dev/null | grep -q "connected"; then
164
+ log_info "微信已登录,跳过扫码"
165
+ else
166
+ log_info "未检测到微信登录,需要扫码..."
167
+ generate_weixin_qr
168
+ fi
169
+
170
+ # 定期备份微信 session(每 5 分钟)
171
+ if [[ "${BACKUP_ENABLED}" == "true" ]]; then
172
+ (while true; do sleep 300; backup_weixin_session; done) &
173
+ fi
174
+
175
+ log_info "启动 OpenClaw 网关..."
176
+ exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}" --token "${OPENCLAW_GATEWAY_TOKEN}"
177
  }
178
 
179
  main "$@"