aip9105 commited on
Commit
dac2247
·
verified ·
1 Parent(s): ba27334

Update start-openclaw.sh

Browse files
Files changed (1) hide show
  1. start-openclaw.sh +10 -29
start-openclaw.sh CHANGED
@@ -1,9 +1,8 @@
1
  #!/bin/bash
2
- set -euo pipefail # 启用更严格的错误处理,检测未定义变量
3
- echo "===== OpenClaw 启动脚本 v2.1 (优化版) ====="
4
  echo "启动时间: $(date)"
5
 
6
- # --- 初始化与准备工作 ---
7
  echo ""
8
  echo "=== 1. 初始化环境与目录 ==="
9
  mkdir -p /root/.openclaw/agents/main/sessions
@@ -12,7 +11,6 @@ mkdir -p /root/.openclaw/sessions
12
  mkdir -p /root/.openclaw/skills
13
  echo "目录结构创建完成。"
14
 
15
- # --- 数据恢复 ---
16
  echo ""
17
  echo "=== 2. 从备份恢复数据 ==="
18
  if python3 /app/sync.py restore; then
@@ -21,23 +19,19 @@ else
21
  echo "⚠️ 数据恢复过程可能存在问题,将继续启动流程。" >&2
22
  fi
23
 
24
- # --- 技能安装与检查 (核心修复点) ---
25
  echo ""
26
  echo "=== 3. 检查与安装技能 ==="
27
- # 修复:技能列表应为由空格分隔的数组元素
28
  SKILLS=("openclaw-tavily-search" "@tencent-weixin/openclaw-weixin")
29
  INSTALLED_SKILLS=()
30
 
31
  for skill in "${SKILLS[@]}"; do
32
  echo ""
33
  echo "检查技能: $skill"
34
- local is_installed=false
35
 
36
- # 方式1: 检查 clawhub 列表
37
  if command -v clawhub &> /dev/null && clawhub list 2>/dev/null | grep -q "$skill"; then
38
  echo " ✓ 已通过 clawhub 安装。"
39
  is_installed=true
40
- # 方式2: 检查标准技能目录
41
  elif [ -d "/app/skills/$skill" ] || [ -d "/root/.openclaw/skills/$skill" ]; then
42
  echo " ✓ 技能目录已存在。"
43
  is_installed=true
@@ -56,7 +50,6 @@ for skill in "${SKILLS[@]}"; do
56
  fi
57
  done
58
 
59
- # 修复:微信插件安装不应在技能循环内重复执行,移出循环
60
  echo ""
61
  echo "=== 4. 安装微信 ClawBot 插件 ==="
62
  echo "安装命令: npx -y @tencent-weixin/openclaw-weixin-cli@latest install"
@@ -72,36 +65,31 @@ else
72
  fi
73
  fi
74
 
75
- # --- 技能结构诊断 (调试用,可注释掉) ---
76
  echo ""
77
  echo "=== 5. 技能结构诊断 ==="
78
  for skill in "${INSTALLED_SKILLS[@]}"; do
79
  echo ""
80
  echo "--- 诊断技能: $skill ---"
81
- # 优化:在更可能的路径下查找,避免搜索根目录
82
- local possible_paths=("/app/skills/$skill" "/root/.openclaw/skills/$skill" "/skills/$skill")
83
  for dir in "${possible_paths[@]}"; do
84
  if [ -d "$dir" ]; then
85
  echo " 找到目录: $dir"
86
- # 检查关键文件
87
  for meta_file in "skill.json" "package.json" "_meta.json"; do
88
  if [ -f "$dir/$meta_file" ]; then
89
  echo " 📄 发现 $meta_file"
90
  fi
91
  done
92
- break # 找到一个有效目录即可
93
  fi
94
  done
95
  done
96
 
97
- # --- 配置生成 ---
98
  echo ""
99
  echo "=== 6. 配置 API 地址与生成主配置 ==="
100
- # 清理和格式化 API 地址
101
- CLEAN_BASE="${OPENAI_API_BASE%/}" # 去除末尾可能存在的斜杠
102
  CLEAN_BASE="${CLEAN_BASE%/chat/completions}"
103
  CLEAN_BASE="${CLEAN_BASE%/v1}"
104
- CLEAN_BASE="${CLEAN_BASE}/v1" # 确保以 /v1 结尾
105
  echo "规范化后的 API 地址: $CLEAN_BASE"
106
 
107
  cat > /root/.openclaw/openclaw.json <<EOF
@@ -163,17 +151,16 @@ cat > /root/.openclaw/openclaw.json <<EOF
163
  EOF
164
  echo "主配置文件已生成: /root/.openclaw/openclaw.json"
165
 
166
- # --- 权限与链接设置 ---
167
  echo ""
168
  echo "=== 7. 设置权限与技能链接 ==="
169
  chmod 700 /root/.openclaw
170
  chmod 600 /root/.openclaw/openclaw.json
171
  chmod 700 /root/.openclaw/{agents,credentials,sessions}
172
- chmod 750 /root/.openclaw/skills # 调整为更安全的权限
173
 
174
  for skill in "${INSTALLED_SKILLS[@]}"; do
175
  echo "处理技能链接: $skill"
176
- local source_dir=""
177
  for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
178
  if [ -d "$dir" ]; then
179
  source_dir="$dir"
@@ -182,7 +169,7 @@ for skill in "${INSTALLED_SKILLS[@]}"; do
182
  done
183
 
184
  if [ -n "$source_dir" ]; then
185
- local link_target="/root/.openclaw/skills/$(basename "$skill")"
186
  if [ ! -L "$link_target" ] || [ "$(readlink -f "$link_target")" != "$(readlink -f "$source_dir")" ]; then
187
  ln -sfn "$source_dir" "$link_target"
188
  echo " ✓ 链接已创建/更新: $link_target -> $source_dir"
@@ -192,13 +179,11 @@ for skill in "${INSTALLED_SKILLS[@]}"; do
192
  fi
193
  done
194
 
195
- # --- 启动前健康检查 ---
196
  echo ""
197
  echo "=== 8. 运行启动前检查 ==="
198
  if command -v openclaw &> /dev/null; then
199
  openclaw doctor --fix 2>&1 | tee /tmp/openclaw-doctor-startup.log
200
  echo "健康检查日志: /tmp/openclaw-doctor-startup.log"
201
-
202
  echo ""
203
  echo "--- 已安装技能列表 (openclaw) ---"
204
  openclaw skills list 2>&1 || echo " 无法列出技能。"
@@ -206,7 +191,6 @@ else
206
  echo "⚠️ openclaw 命令未找到,跳过健康检查。" >&2
207
  fi
208
 
209
- # --- 环境摘要 ---
210
  echo ""
211
  echo "=== 9. 环境摘要 ==="
212
  echo "服务端口: $PORT"
@@ -215,10 +199,8 @@ echo "API 地址: ${CLEAN_BASE%/v1} (v1)"
215
  echo "网关令牌: ${OPENCLAW_GATEWAY_PASSWORD:0:3}..."
216
  echo "Tavily Key: ${TAVILY_API_KEY:0:5}..."
217
 
218
- # --- 启动后台任务与主服务 ---
219
  echo ""
220
  echo "=== 10. 启动后台任务与主服务 ==="
221
- # 启动定时备份任务 (每小时一次)
222
  (
223
  echo " 定时备份任务启动。"
224
  while true; do
@@ -239,5 +221,4 @@ echo "正在启动 OpenClaw 网关..."
239
  echo "控制台 (如配置): "
240
  echo "======================================"
241
  echo ""
242
- # 使用 exec 启动,使网关成为容器主进程
243
  exec openclaw gateway run --port "$PORT"
 
1
  #!/bin/bash
2
+ set -euo pipefail
3
+ echo "===== OpenClaw 启动脚本 v2.2 (修正版) ====="
4
  echo "启动时间: $(date)"
5
 
 
6
  echo ""
7
  echo "=== 1. 初始化环境与目录 ==="
8
  mkdir -p /root/.openclaw/agents/main/sessions
 
11
  mkdir -p /root/.openclaw/skills
12
  echo "目录结构创建完成。"
13
 
 
14
  echo ""
15
  echo "=== 2. 从备份恢复数据 ==="
16
  if python3 /app/sync.py restore; then
 
19
  echo "⚠️ 数据恢复过程可能存在问题,将继续启动流程。" >&2
20
  fi
21
 
 
22
  echo ""
23
  echo "=== 3. 检查与安装技能 ==="
 
24
  SKILLS=("openclaw-tavily-search" "@tencent-weixin/openclaw-weixin")
25
  INSTALLED_SKILLS=()
26
 
27
  for skill in "${SKILLS[@]}"; do
28
  echo ""
29
  echo "检查技能: $skill"
30
+ is_installed=false
31
 
 
32
  if command -v clawhub &> /dev/null && clawhub list 2>/dev/null | grep -q "$skill"; then
33
  echo " ✓ 已通过 clawhub 安装。"
34
  is_installed=true
 
35
  elif [ -d "/app/skills/$skill" ] || [ -d "/root/.openclaw/skills/$skill" ]; then
36
  echo " ✓ 技能目录已存在。"
37
  is_installed=true
 
50
  fi
51
  done
52
 
 
53
  echo ""
54
  echo "=== 4. 安装微信 ClawBot 插件 ==="
55
  echo "安装命令: npx -y @tencent-weixin/openclaw-weixin-cli@latest install"
 
65
  fi
66
  fi
67
 
 
68
  echo ""
69
  echo "=== 5. 技能结构诊断 ==="
70
  for skill in "${INSTALLED_SKILLS[@]}"; do
71
  echo ""
72
  echo "--- 诊断技能: $skill ---"
73
+ possible_paths=("/app/skills/$skill" "/root/.openclaw/skills/$skill" "/skills/$skill")
 
74
  for dir in "${possible_paths[@]}"; do
75
  if [ -d "$dir" ]; then
76
  echo " 找到目录: $dir"
 
77
  for meta_file in "skill.json" "package.json" "_meta.json"; do
78
  if [ -f "$dir/$meta_file" ]; then
79
  echo " 📄 发现 $meta_file"
80
  fi
81
  done
82
+ break
83
  fi
84
  done
85
  done
86
 
 
87
  echo ""
88
  echo "=== 6. 配置 API 地址与生成主配置 ==="
89
+ CLEAN_BASE="${OPENAI_API_BASE%/}"
 
90
  CLEAN_BASE="${CLEAN_BASE%/chat/completions}"
91
  CLEAN_BASE="${CLEAN_BASE%/v1}"
92
+ CLEAN_BASE="${CLEAN_BASE}/v1"
93
  echo "规范化后的 API 地址: $CLEAN_BASE"
94
 
95
  cat > /root/.openclaw/openclaw.json <<EOF
 
151
  EOF
152
  echo "主配置文件已生成: /root/.openclaw/openclaw.json"
153
 
 
154
  echo ""
155
  echo "=== 7. 设置权限与技能链接 ==="
156
  chmod 700 /root/.openclaw
157
  chmod 600 /root/.openclaw/openclaw.json
158
  chmod 700 /root/.openclaw/{agents,credentials,sessions}
159
+ chmod 750 /root/.openclaw/skills
160
 
161
  for skill in "${INSTALLED_SKILLS[@]}"; do
162
  echo "处理技能链接: $skill"
163
+ source_dir=""
164
  for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
165
  if [ -d "$dir" ]; then
166
  source_dir="$dir"
 
169
  done
170
 
171
  if [ -n "$source_dir" ]; then
172
+ link_target="/root/.openclaw/skills/$(basename "$skill")"
173
  if [ ! -L "$link_target" ] || [ "$(readlink -f "$link_target")" != "$(readlink -f "$source_dir")" ]; then
174
  ln -sfn "$source_dir" "$link_target"
175
  echo " ✓ 链接已创建/更新: $link_target -> $source_dir"
 
179
  fi
180
  done
181
 
 
182
  echo ""
183
  echo "=== 8. 运行启动前检查 ==="
184
  if command -v openclaw &> /dev/null; then
185
  openclaw doctor --fix 2>&1 | tee /tmp/openclaw-doctor-startup.log
186
  echo "健康检查日志: /tmp/openclaw-doctor-startup.log"
 
187
  echo ""
188
  echo "--- 已安装技能列表 (openclaw) ---"
189
  openclaw skills list 2>&1 || echo " 无法列出技能。"
 
191
  echo "⚠️ openclaw 命令未找到,跳过健康检查。" >&2
192
  fi
193
 
 
194
  echo ""
195
  echo "=== 9. 环境摘要 ==="
196
  echo "服务端口: $PORT"
 
199
  echo "网关令牌: ${OPENCLAW_GATEWAY_PASSWORD:0:3}..."
200
  echo "Tavily Key: ${TAVILY_API_KEY:0:5}..."
201
 
 
202
  echo ""
203
  echo "=== 10. 启动后台任务与主服务 ==="
 
204
  (
205
  echo " 定时备份任务启动。"
206
  while true; do
 
221
  echo "控制台 (如配置): "
222
  echo "======================================"
223
  echo ""
 
224
  exec openclaw gateway run --port "$PORT"