aip9105 commited on
Commit
670c1d0
·
verified ·
1 Parent(s): 84dd831

Update start-openclaw.sh

Browse files
Files changed (1) hide show
  1. start-openclaw.sh +192 -87
start-openclaw.sh CHANGED
@@ -1,49 +1,119 @@
1
  #!/bin/bash
2
  set -e
3
 
 
 
 
4
  # 1. 创建必要的目录
 
 
5
  mkdir -p /root/.openclaw/agents/main/sessions
6
  mkdir -p /root/.openclaw/credentials
7
  mkdir -p /root/.openclaw/sessions
 
 
8
 
9
  # 2. 从持久化存储恢复数据
 
 
10
  python3 /app/sync.py restore
 
11
 
12
-
13
- # 3. 检查并安装必要的技能
14
  echo ""
15
- echo "=== 检查技能安装状态 ==="
16
 
17
- # 检查 liang-tavily-search 是否已安装
18
- echo "检查 liang-tavily-search 技能..."
19
- if ! clawhub list 2>/dev/null | grep -q "liang-tavily-search"; then
20
- echo "安装 liang-tavily-search 技能..."
21
- clawhub install liang-tavily-search
22
- echo "liang-tavily-search 安装完成"
23
- else
24
- echo "liang-tavily-search 技能已安装"
25
- fi
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- # 4. 查看已安装的技能列表
29
  echo ""
30
- echo "=== 已安装的 ClawHub 技能列表 ==="
31
- clawhub list 2>/dev/null || echo "无法获取技能列表"
32
 
33
- # 5. 清理和格式化 API 地址
34
- CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
- # 在容器环境中,通常绑定到 0.0.0.0 是安全的,但可以限制为 127.0.0.1
38
- # 如果需要在容器外访问,则保持 0.0.0.0
39
- BIND_ADDRESS="0.0.0.0"
40
- if [ -n "$RESTRICT_TO_LOCALHOST" ] && [ "$RESTRICT_TO_LOCALHOST" = "true" ]; then
41
- BIND_ADDRESS="127.0.0.1"
42
  fi
43
 
44
- # 6. 生成主配置文件
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  echo ""
46
- echo "=== 生成配置文件 ==="
47
  cat > /root/.openclaw/openclaw.json <<EOF
48
  {
49
  "models": {
@@ -63,9 +133,14 @@ cat > /root/.openclaw/openclaw.json <<EOF
63
  "restart": true
64
  },
65
  "gateway": {
66
- "mode": "local", "bind": "$BIND_ADDRESS", "port": $PORT,
 
 
67
  "trustedProxies": ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
68
- "auth": { "mode": "token", "token": "$OPENCLAW_GATEWAY_PASSWORD" },
 
 
 
69
  "controlUi": {
70
  "allowedOrigins": [
71
  "https://aip9105-openclaw.hf.space/"
@@ -76,98 +151,128 @@ cat > /root/.openclaw/openclaw.json <<EOF
76
  }
77
  },
78
  "skills": {
 
 
 
 
 
79
  "entries": {
80
  "liang-tavily-search": {
81
  "enabled": true,
82
  "apiKey": "$TAVILY_API_KEY"
83
- }
 
84
  }
85
  }
86
  }
87
  EOF
88
- echo "配置文件生成完成: /root/.openclaw/openclaw.json"
89
 
90
- # 7. 修复权限
 
 
91
  echo ""
92
- echo "=== 设置文件权限 ==="
93
  chmod 700 /root/.openclaw
94
  chmod 600 /root/.openclaw/openclaw.json
95
  chmod 700 /root/.openclaw/agents
96
  chmod 700 /root/.openclaw/credentials
97
  chmod 700 /root/.openclaw/sessions
98
- chmod 700 /root/.openclaw/skills 2>/dev/null || true
99
-
100
- # 7. 安装常见技能依赖
101
- # 检查 liang-tavily-search 是否已安装
102
- if ! clawhub list | grep -q "liang-tavily-search"; then
103
- echo "安装 liang-tavily-search 技能..."
104
- clawhub install liang-tavily-search
105
- else
106
- echo "liang-tavily-search 技能已安装"
107
- fi
108
 
109
- # 8. 检查技能文件结构
110
  echo ""
111
- echo "=== 检查技能文件结构 ==="
112
- find / -name "*tavily*" -type d 2>/dev/null | head -10
113
-
114
- # 9. 检查技能包内容
115
- echo "=== 检查 liang-tavily-search 技能包 ==="
116
- if [ -d "/app/skills/liang-tavily-search" ]; then
117
- echo "技能安装在: /app/skills/liang-tavily-search"
118
- ls -la /app/skills/liang-tavily-search/
119
 
120
- if [ -f "/app/skills/liang-tavily-search/package.json" ]; then
121
- echo ""
122
- echo "package.json 内容:"
123
- cat /app/skills/liang-tavily-search/package.json
124
- fi
125
-
126
- if [ -f "/app/skills/liang-tavily-search/skill.json" ]; then
127
- echo ""
128
- echo "skill.json 内容:"
129
- cat /app/skills/liang-tavily-search/skill.json
130
- fi
131
 
132
- # 创建符号链接到 OpenClaw 的技能目录
133
- mkdir -p /root/.openclaw/skills
134
- if [ ! -L "/root/.openclaw/skills/liang-tavily-search" ] && [ ! -d "/root/.openclaw/skills/liang-tavily-search" ]; then
135
- echo "创建符号链接: /app/skills/liang-tavily-search -> /root/.openclaw/skills/liang-tavily-search"
136
- ln -sf /app/skills/liang-tavily-search /root/.openclaw/skills/liang-tavily-search
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  fi
138
- fi
139
 
140
- echo "=== OpenClaw 识别的技能 ==="
141
- openclaw skills list 2>/dev/null || echo "无法获取技能列表,继续启动..."
 
 
142
 
 
 
 
 
 
143
 
144
- # 10. 启动定时备份
145
  echo ""
146
- echo "=== 启动定时备份 ==="
147
- (while true; do sleep 3600; python3 /app/sync.py backup; done) &
 
148
 
149
- # 11. 运行健康检查
150
  echo ""
151
- echo "=== 运行 OpenClaw 健康检查 ==="
152
- openclaw doctor --fix || echo "健康检查完成"
153
 
154
- # 12. 检查 OpenClaw 技能列表
155
  echo ""
156
- echo "=== OpenClaw 识别的技能 ==="
157
- openclaw skills list 2>/dev/null || echo "无法获取技能列表,继续启动..."
 
 
 
 
 
 
158
 
159
- # 13. 显示最终配置
160
  echo ""
161
- echo "=== 最终配置摘要 ==="
162
- echo "端口: $PORT"
163
- echo "模型: $MODEL"
164
- echo "API 基础地址: $CLEAN_BASE"
165
- echo "Tavily API 密钥: ${TAVILY_API_KEY:0:10}..."
166
- echo "网关令牌: ${OPENCLAW_GATEWAY_PASSWORD:0:10}..."
167
 
168
- # 14. 启动网关
169
  echo ""
170
- echo "=== 启动 OpenClaw 网关 ==="
171
  echo "监听端口: $PORT"
172
- echo "绑定模式: lan (0.0.0.0:$PORT)"
 
 
173
  exec openclaw gateway run --port $PORT
 
1
  #!/bin/bash
2
  set -e
3
 
4
+ echo "===== OpenClaw 启动脚本 v2.0 ====="
5
+ echo "启动时间: $(date)"
6
+
7
  # 1. 创建必要的目录
8
+ echo ""
9
+ echo "=== 1. 创建目录结构 ==="
10
  mkdir -p /root/.openclaw/agents/main/sessions
11
  mkdir -p /root/.openclaw/credentials
12
  mkdir -p /root/.openclaw/sessions
13
+ mkdir -p /root/.openclaw/skills
14
+ echo "目录创建完成"
15
 
16
  # 2. 从持久化存储恢复数据
17
+ echo ""
18
+ echo "=== 2. 从备份恢复数据 ==="
19
  python3 /app/sync.py restore
20
+ echo "数据恢复完成"
21
 
22
+ # 3. 检查技能安装状态
 
23
  echo ""
24
+ echo "=== 3. 检查技能安装 ==="
25
 
26
+ # 定义技能列表
27
+ SKILLS=("liang-tavily-search")
28
+ INSTALLED_SKILLS=()
 
 
 
 
 
 
29
 
30
+ # 检查并安装技能
31
+ for skill in "${SKILLS[@]}"; do
32
+ echo ""
33
+ echo "检查技能: $skill"
34
+
35
+ # 检查是否已安装
36
+ if clawhub list 2>/dev/null | grep -q "$skill"; then
37
+ echo "✓ 已通过 clawhub 安装: $skill"
38
+ INSTALLED_SKILLS+=("$skill")
39
+ elif [ -d "/app/skills/$skill" ]; then
40
+ echo "✓ 技能目录存在: /app/skills/$skill"
41
+ INSTALLED_SKILLS+=("$skill")
42
+ else
43
+ echo "✗ 未找到技能: $skill,尝试安装..."
44
+ echo "安装命令: clawhub install $skill"
45
+
46
+ # 尝试安装
47
+ if clawhub install "$skill"; then
48
+ echo "✓ 安装成功: $skill"
49
+ INSTALLED_SKILLS+=("$skill")
50
+ else
51
+ echo "⚠️ 安装失败: $skill"
52
+ fi
53
+ fi
54
+ done
55
 
56
+ # 4. 详细检查技能结构
57
  echo ""
58
+ echo "=== 4. 详细检查技能结构 ==="
 
59
 
60
+ for skill in "${INSTALLED_SKILLS[@]}"; do
61
+ echo ""
62
+ echo "--- 检查 $skill ---"
63
+
64
+ # 查找技能可能的位置
65
+ find / -type d -name "*$skill*" 2>/dev/null | head -5 | while read dir; do
66
+ echo "找到目录: $dir"
67
+ ls -la "$dir/"
68
+
69
+ # 检查关键文件
70
+ for file in "package.json" "skill.json" "_meta.json" "skill.yml" "skill.yaml"; do
71
+ if [ -f "$dir/$file" ]; then
72
+ echo " 📄 找到 $file:"
73
+ head -20 "$dir/$file"
74
+ fi
75
+ done
76
+ done
77
+ done
78
 
79
+ # 5. 检查 _meta.json 内容
80
+ echo ""
81
+ echo "=== 5. 检查技能元数据 ==="
82
+ if [ -f "/app/skills/liang-tavily-search/_meta.json" ]; then
83
+ echo "_meta.json 内容:"
84
+ cat "/app/skills/liang-tavily-search/_meta.json"
85
+
86
+ # 解析 _meta.json
87
+ if command -v jq &> /dev/null; then
88
+ echo ""
89
+ echo "解析 _meta.json:"
90
+ cat "/app/skills/liang-tavily-search/_meta.json" | jq .
91
+ fi
92
+ fi
93
 
94
+ # 6. 检查 SKILL.md
95
+ if [ -f "/app/skills/liang-tavily-search/SKILL.md" ]; then
96
+ echo ""
97
+ echo "SKILL.md 前20行:"
98
+ head -20 "/app/skills/liang-tavily-search/SKILL.md"
99
  fi
100
 
101
+ # 7. 检查 scripts 目录
102
+ if [ -d "/app/skills/liang-tavily-search/scripts" ]; then
103
+ echo ""
104
+ echo "scripts 目录内容:"
105
+ ls -la "/app/skills/liang-tavily-search/scripts/"
106
+ fi
107
+
108
+ # 8. 清理和格式化 API 地址
109
+ echo ""
110
+ echo "=== 6. 配置 API 地址 ==="
111
+ CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")
112
+ echo "API 地址: $CLEAN_BASE"
113
+
114
+ # 9. 生成主配置文件
115
  echo ""
116
+ echo "=== 7. 生成配置文件 ==="
117
  cat > /root/.openclaw/openclaw.json <<EOF
118
  {
119
  "models": {
 
133
  "restart": true
134
  },
135
  "gateway": {
136
+ "mode": "local",
137
+ "bind": "lan",
138
+ "port": $PORT,
139
  "trustedProxies": ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
140
+ "auth": {
141
+ "mode": "token",
142
+ "token": "$OPENCLAW_GATEWAY_PASSWORD"
143
+ },
144
  "controlUi": {
145
  "allowedOrigins": [
146
  "https://aip9105-openclaw.hf.space/"
 
151
  }
152
  },
153
  "skills": {
154
+ "directories": [
155
+ "/root/.openclaw/skills",
156
+ "/app/skills",
157
+ "/skills"
158
+ ],
159
  "entries": {
160
  "liang-tavily-search": {
161
  "enabled": true,
162
  "apiKey": "$TAVILY_API_KEY"
163
+ },
164
+
165
  }
166
  }
167
  }
168
  EOF
 
169
 
170
+ echo "配置文件已生成: /root/.openclaw/openclaw.json"
171
+
172
+ # 10. 修复权限
173
  echo ""
174
+ echo "=== 8. 设置文件权限 ==="
175
  chmod 700 /root/.openclaw
176
  chmod 600 /root/.openclaw/openclaw.json
177
  chmod 700 /root/.openclaw/agents
178
  chmod 700 /root/.openclaw/credentials
179
  chmod 700 /root/.openclaw/sessions
180
+ chmod 755 /root/.openclaw/skills 2>/dev/null || true
 
 
 
 
 
 
 
 
 
181
 
182
+ # 11. 创建技能符号链接
183
  echo ""
184
+ echo "=== 9. 设置技能链接 ==="
185
+ for skill in "${INSTALLED_SKILLS[@]}"; do
186
+ echo "处理技能: $skill"
 
 
 
 
 
187
 
188
+ # 查找技能目录
189
+ SKILL_DIR=""
190
+ for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
191
+ if [ -d "$dir" ]; then
192
+ SKILL_DIR="$dir"
193
+ break
194
+ fi
195
+ done
 
 
 
196
 
197
+ if [ -n "$SKILL_DIR" ]; then
198
+ echo " 找到技能目录: $SKILL_DIR"
199
+
200
+ # 创建符号链接 OpenClaw 技能目录
201
+ LINK_TARGET="/root/.openclaw/skills/$skill"
202
+ if [ ! -e "$LINK_TARGET" ] && [ "$SKILL_DIR" != "$LINK_TARGET" ]; then
203
+ echo " 创建链接: $SKILL_DIR -> $LINK_TARGET"
204
+ ln -sf "$SKILL_DIR" "$LINK_TARGET"
205
+ fi
206
+
207
+ # 检查是否缺少关键文件
208
+ if [ ! -f "$SKILL_DIR/package.json" ] && [ ! -f "$SKILL_DIR/skill.json" ]; then
209
+ echo " ⚠️ 警告: 缺少 package.json 或 skill.json,技能可能无法被 OpenClaw 识别"
210
+
211
+ # 尝试创建基本的 skill.json
212
+ if [ ! -f "$SKILL_DIR/skill.json" ] && [ -f "$SKILL_DIR/_meta.json" ]; then
213
+ echo " 尝试从 _meta.json 创建 skill.json..."
214
+ cat > "$SKILL_DIR/skill.json" <<EOF
215
+ {
216
+ "name": "$skill",
217
+ "description": "Auto-generated from _meta.json",
218
+ "version": "1.0.0",
219
+ "main": "index.js",
220
+ "type": "skill"
221
+ }
222
+ EOF
223
+ echo " 创建了基本的 skill.json"
224
+ fi
225
+ fi
226
+ else
227
+ echo " ❌ 未找到技能目录: $skill"
228
  fi
229
+ done
230
 
231
+ # 12. 启动定时备份
232
+ echo ""
233
+ echo "=== 10. 启动定时备份 ==="
234
+ (while true; do sleep 3600; python3 /app/sync.py backup; done) &
235
 
236
+ # 13. 运行健康检查
237
+ echo ""
238
+ echo "=== 11. 运行健康检查 ==="
239
+ openclaw doctor --fix 2>&1 | tee /tmp/openclaw-doctor.log
240
+ echo "健康检查完成,日志: /tmp/openclaw-doctor.log"
241
 
242
+ # 14. 列出所有技能
243
  echo ""
244
+ echo "=== 12. 列出所有技能 ==="
245
+ echo "--- ClawHub 安装的技能 ---"
246
+ clawhub list 2>/dev/null || echo "无法获取列表"
247
 
 
248
  echo ""
249
+ echo "--- OpenClaw 识别的技能 ---"
250
+ openclaw skills list 2>&1 || echo "无法获取技能列表"
251
 
252
+ # 15. 调试:检查技能配置
253
  echo ""
254
+ echo "=== 13. 调试信息 ==="
255
+ echo "当前用户: $(whoami)"
256
+ echo "HOME 目录: $HOME"
257
+ echo "PORT: $PORT"
258
+ echo "技能目录列表:"
259
+ ls -la /root/.openclaw/skills/ 2>/dev/null || echo "无技能目录"
260
+ ls -la /app/skills/ 2>/dev/null || echo "无 /app/skills 目录"
261
+ ls -la /skills/ 2>/dev/null || echo "无 /skills 目录"
262
 
263
+ # 16. 检查环境变量
264
  echo ""
265
+ echo "环境变量检查:"
266
+ echo "TAVILY_API_KEY: ${TAVILY_API_KEY:0:5}..."
267
+ echo "OPENCLAW_GATEWAY_PASSWORD: ${OPENCLAW_GATEWAY_PASSWORD:0:5}..."
268
+ echo "MODEL: $MODEL"
269
+ echo "OPENAI_API_BASE: $OPENAI_API_BASE"
 
270
 
271
+ # 17. 启动网关
272
  echo ""
273
+ echo "=== 14. 启动 OpenClaw 网关 ==="
274
  echo "监听端口: $PORT"
275
+ echo "绑定模式: lan"
276
+ echo "控制台: https://aip9105-openclaw.hf.space/"
277
+ echo "======================================"
278
  exec openclaw gateway run --port $PORT