Update start-openclaw.sh
Browse files- start-openclaw.sh +43 -87
start-openclaw.sh
CHANGED
|
@@ -1,14 +1,11 @@
|
|
| 1 |
#!/bin/bash
|
| 2 |
set -euo pipefail
|
| 3 |
-
echo "===== OpenClaw 启动脚本 v2.
|
| 4 |
echo "启动时间: $(date)"
|
| 5 |
|
| 6 |
echo ""
|
| 7 |
echo "=== 1. 初始化环境与目录 ==="
|
| 8 |
-
mkdir -p /root/.openclaw/agents/main/sessions
|
| 9 |
-
mkdir -p /root/.openclaw/credentials
|
| 10 |
-
mkdir -p /root/.openclaw/sessions
|
| 11 |
-
mkdir -p /root/.openclaw/skills
|
| 12 |
echo "目录结构创建完成。"
|
| 13 |
|
| 14 |
echo ""
|
|
@@ -16,68 +13,50 @@ echo "=== 2. 从备份恢复数据 ==="
|
|
| 16 |
if python3 /app/sync.py restore; then
|
| 17 |
echo "✓ 数据恢复完成。"
|
| 18 |
else
|
| 19 |
-
echo "⚠️ 数据恢复
|
| 20 |
fi
|
| 21 |
|
| 22 |
echo ""
|
| 23 |
echo "=== 3. 检查与安装技能 ==="
|
| 24 |
-
SKILLS=("openclaw-tavily-search"
|
| 25 |
INSTALLED_SKILLS=()
|
| 26 |
|
| 27 |
for skill in "${SKILLS[@]}"; do
|
| 28 |
-
echo ""
|
| 29 |
-
echo "检查技能: $skill"
|
| 30 |
is_installed=false
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
|
|
|
| 34 |
is_installed=true
|
|
|
|
| 35 |
elif [ -d "/app/skills/$skill" ] || [ -d "/root/.openclaw/skills/$skill" ]; then
|
| 36 |
-
echo " ✓
|
| 37 |
is_installed=true
|
|
|
|
| 38 |
else
|
| 39 |
-
echo "
|
| 40 |
-
if
|
| 41 |
-
echo " ✓ 安装成功
|
| 42 |
is_installed=true
|
| 43 |
else
|
| 44 |
-
echo " ⚠️ 安装失败
|
| 45 |
fi
|
| 46 |
fi
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
INSTALLED_SKILLS+=("$skill")
|
| 50 |
-
fi
|
| 51 |
done
|
| 52 |
|
| 53 |
-
|
| 54 |
echo ""
|
| 55 |
-
echo "===
|
| 56 |
-
|
| 57 |
-
echo ""
|
| 58 |
-
echo "--- 诊断技能: $skill ---"
|
| 59 |
-
possible_paths=("/app/skills/$skill" "/root/.openclaw/skills/$skill" "/skills/$skill")
|
| 60 |
-
for dir in "${possible_paths[@]}"; do
|
| 61 |
-
if [ -d "$dir" ]; then
|
| 62 |
-
echo " 找到目录: $dir"
|
| 63 |
-
for meta_file in "skill.json" "package.json" "_meta.json"; do
|
| 64 |
-
if [ -f "$dir/$meta_file" ]; then
|
| 65 |
-
echo " 📄 发现 $meta_file"
|
| 66 |
-
fi
|
| 67 |
-
done
|
| 68 |
-
break
|
| 69 |
-
fi
|
| 70 |
-
done
|
| 71 |
-
done
|
| 72 |
-
|
| 73 |
-
echo ""
|
| 74 |
-
echo "=== 6. 配置 API 地址与生成主配置 ==="
|
| 75 |
CLEAN_BASE="${OPENAI_API_BASE%/}"
|
| 76 |
CLEAN_BASE="${CLEAN_BASE%/chat/completions}"
|
| 77 |
CLEAN_BASE="${CLEAN_BASE%/v1}"
|
| 78 |
CLEAN_BASE="${CLEAN_BASE}/v1"
|
| 79 |
-
echo "
|
| 80 |
|
|
|
|
| 81 |
cat > /root/.openclaw/openclaw.json <<EOF
|
| 82 |
{
|
| 83 |
"models": {
|
|
@@ -110,9 +89,7 @@ cat > /root/.openclaw/openclaw.json <<EOF
|
|
| 110 |
"token": "$OPENCLAW_GATEWAY_PASSWORD"
|
| 111 |
},
|
| 112 |
"controlUi": {
|
| 113 |
-
"allowedOrigins": [
|
| 114 |
-
"*",
|
| 115 |
-
],
|
| 116 |
"dangerouslyAllowHostHeaderOriginFallback": true,
|
| 117 |
"allowInsecureAuth": true,
|
| 118 |
"dangerouslyDisableDeviceAuth": true
|
|
@@ -125,80 +102,59 @@ cat > /root/.openclaw/openclaw.json <<EOF
|
|
| 125 |
"enabled": true
|
| 126 |
}
|
| 127 |
}
|
| 128 |
-
}
|
| 129 |
-
|
| 130 |
}
|
| 131 |
EOF
|
| 132 |
-
echo "
|
| 133 |
|
| 134 |
echo ""
|
| 135 |
-
echo "===
|
| 136 |
chmod 700 /root/.openclaw
|
| 137 |
chmod 600 /root/.openclaw/openclaw.json
|
| 138 |
chmod 700 /root/.openclaw/{agents,credentials,sessions}
|
| 139 |
chmod 750 /root/.openclaw/skills
|
| 140 |
|
|
|
|
| 141 |
for skill in "${INSTALLED_SKILLS[@]}"; do
|
| 142 |
-
echo "处理技能链接: $skill"
|
| 143 |
-
source_dir=""
|
| 144 |
for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
|
| 145 |
if [ -d "$dir" ]; then
|
| 146 |
-
|
|
|
|
| 147 |
break
|
| 148 |
fi
|
| 149 |
done
|
| 150 |
-
|
| 151 |
-
if [ -n "$source_dir" ]; then
|
| 152 |
-
link_target="/root/.openclaw/skills/$(basename "$skill")"
|
| 153 |
-
if [ ! -L "$link_target" ] || [ "$(readlink -f "$link_target")" != "$(readlink -f "$source_dir")" ]; then
|
| 154 |
-
ln -sfn "$source_dir" "$link_target"
|
| 155 |
-
echo " ✓ 链接已创建/更新: $link_target -> $source_dir"
|
| 156 |
-
fi
|
| 157 |
-
else
|
| 158 |
-
echo " ⚠️ 未找到技能目录,无法创建链接: $skill" >&2
|
| 159 |
-
fi
|
| 160 |
done
|
| 161 |
|
| 162 |
echo ""
|
| 163 |
-
echo "===
|
| 164 |
-
if command -v openclaw &>
|
| 165 |
openclaw doctor --fix 2>&1 | tee /tmp/openclaw-doctor-startup.log
|
| 166 |
-
echo "
|
| 167 |
-
|
| 168 |
-
echo "--- 已安装技能列表 (openclaw) ---"
|
| 169 |
-
openclaw skills list 2>&1 || echo " 无法列出技能。"
|
| 170 |
else
|
| 171 |
-
echo "⚠️ openclaw 命令未找到
|
| 172 |
fi
|
| 173 |
|
| 174 |
echo ""
|
| 175 |
-
echo "===
|
| 176 |
-
echo "
|
| 177 |
-
echo "
|
| 178 |
-
echo "
|
| 179 |
-
echo "
|
| 180 |
-
echo "Tavily Key: ${TAVILY_API_KEY:0:5}..."
|
| 181 |
|
| 182 |
echo ""
|
| 183 |
-
echo "===
|
|
|
|
| 184 |
(
|
| 185 |
-
echo " 定时备份任务启动。"
|
| 186 |
while true; do
|
| 187 |
sleep 3600
|
| 188 |
-
|
| 189 |
-
echo " [$(date)] 定时备份完成。"
|
| 190 |
-
else
|
| 191 |
-
echo " [$(date)] 定时备份失败。" >&2
|
| 192 |
-
fi
|
| 193 |
done
|
| 194 |
) &
|
| 195 |
-
BACKUP_PID=$!
|
| 196 |
-
echo " 定时备份任务 PID: $BACKUP_PID"
|
| 197 |
|
| 198 |
echo ""
|
| 199 |
echo "======================================"
|
| 200 |
-
echo "
|
| 201 |
-
echo "控制台 (如配置): "
|
| 202 |
echo "======================================"
|
| 203 |
echo ""
|
| 204 |
exec openclaw gateway run --port "$PORT"
|
|
|
|
| 1 |
#!/bin/bash
|
| 2 |
set -euo pipefail
|
| 3 |
+
echo "===== OpenClaw 启动脚本 v2.3 (简化版) ====="
|
| 4 |
echo "启动时间: $(date)"
|
| 5 |
|
| 6 |
echo ""
|
| 7 |
echo "=== 1. 初始化环境与目录 ==="
|
| 8 |
+
mkdir -p /root/.openclaw/{agents/main/sessions,credentials,sessions,skills}
|
|
|
|
|
|
|
|
|
|
| 9 |
echo "目录结构创建完成。"
|
| 10 |
|
| 11 |
echo ""
|
|
|
|
| 13 |
if python3 /app/sync.py restore; then
|
| 14 |
echo "✓ 数据恢复完成。"
|
| 15 |
else
|
| 16 |
+
echo "⚠️ 数据恢复失败,继续启动。" >&2
|
| 17 |
fi
|
| 18 |
|
| 19 |
echo ""
|
| 20 |
echo "=== 3. 检查与安装技能 ==="
|
| 21 |
+
SKILLS=("openclaw-tavily-search")
|
| 22 |
INSTALLED_SKILLS=()
|
| 23 |
|
| 24 |
for skill in "${SKILLS[@]}"; do
|
| 25 |
+
echo "处理技能: $skill"
|
|
|
|
| 26 |
is_installed=false
|
| 27 |
+
|
| 28 |
+
# 检查是否已安装
|
| 29 |
+
if clawhub list 2>/dev/null | grep -q "$skill"; then
|
| 30 |
+
echo " ✓ 已安装"
|
| 31 |
is_installed=true
|
| 32 |
+
# 检查是否已存在目录
|
| 33 |
elif [ -d "/app/skills/$skill" ] || [ -d "/root/.openclaw/skills/$skill" ]; then
|
| 34 |
+
echo " ✓ 目录已存在"
|
| 35 |
is_installed=true
|
| 36 |
+
# 尝试安装
|
| 37 |
else
|
| 38 |
+
echo " 🔧 尝试安装..."
|
| 39 |
+
if clawhub install "$skill"; then
|
| 40 |
+
echo " ✓ 安装成功"
|
| 41 |
is_installed=true
|
| 42 |
else
|
| 43 |
+
echo " ⚠️ 安装失败" >&2
|
| 44 |
fi
|
| 45 |
fi
|
| 46 |
+
|
| 47 |
+
[ "$is_installed" = true ] && INSTALLED_SKILLS+=("$skill")
|
|
|
|
|
|
|
| 48 |
done
|
| 49 |
|
|
|
|
| 50 |
echo ""
|
| 51 |
+
echo "=== 4. 配置 API 地址与生成主配置 ==="
|
| 52 |
+
# 清理 API 地址
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
CLEAN_BASE="${OPENAI_API_BASE%/}"
|
| 54 |
CLEAN_BASE="${CLEAN_BASE%/chat/completions}"
|
| 55 |
CLEAN_BASE="${CLEAN_BASE%/v1}"
|
| 56 |
CLEAN_BASE="${CLEAN_BASE}/v1"
|
| 57 |
+
echo "API 地址: $CLEAN_BASE"
|
| 58 |
|
| 59 |
+
# 生成主配置
|
| 60 |
cat > /root/.openclaw/openclaw.json <<EOF
|
| 61 |
{
|
| 62 |
"models": {
|
|
|
|
| 89 |
"token": "$OPENCLAW_GATEWAY_PASSWORD"
|
| 90 |
},
|
| 91 |
"controlUi": {
|
| 92 |
+
"allowedOrigins": ["*"],
|
|
|
|
|
|
|
| 93 |
"dangerouslyAllowHostHeaderOriginFallback": true,
|
| 94 |
"allowInsecureAuth": true,
|
| 95 |
"dangerouslyDisableDeviceAuth": true
|
|
|
|
| 102 |
"enabled": true
|
| 103 |
}
|
| 104 |
}
|
| 105 |
+
}
|
|
|
|
| 106 |
}
|
| 107 |
EOF
|
| 108 |
+
echo "配置生成完成"
|
| 109 |
|
| 110 |
echo ""
|
| 111 |
+
echo "=== 5. 设置权限与技能链接 ==="
|
| 112 |
chmod 700 /root/.openclaw
|
| 113 |
chmod 600 /root/.openclaw/openclaw.json
|
| 114 |
chmod 700 /root/.openclaw/{agents,credentials,sessions}
|
| 115 |
chmod 750 /root/.openclaw/skills
|
| 116 |
|
| 117 |
+
# 创建技能链接
|
| 118 |
for skill in "${INSTALLED_SKILLS[@]}"; do
|
|
|
|
|
|
|
| 119 |
for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
|
| 120 |
if [ -d "$dir" ]; then
|
| 121 |
+
ln -sfn "$dir" "/root/.openclaw/skills/$(basename "$skill")"
|
| 122 |
+
echo "✓ 链接创建: $skill"
|
| 123 |
break
|
| 124 |
fi
|
| 125 |
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
done
|
| 127 |
|
| 128 |
echo ""
|
| 129 |
+
echo "=== 6. 运行启动前检查 ==="
|
| 130 |
+
if command -v openclaw &>/dev/null; then
|
| 131 |
openclaw doctor --fix 2>&1 | tee /tmp/openclaw-doctor-startup.log
|
| 132 |
+
echo "--- 已安装技能列表 ---"
|
| 133 |
+
openclaw skills list 2>&1 || true
|
|
|
|
|
|
|
| 134 |
else
|
| 135 |
+
echo "⚠️ openclaw 命令未找到" >&2
|
| 136 |
fi
|
| 137 |
|
| 138 |
echo ""
|
| 139 |
+
echo "=== 7. 环境摘要 ==="
|
| 140 |
+
echo "端口: $PORT | 模型: $MODEL"
|
| 141 |
+
echo "API: ${CLEAN_BASE%/v1} (v1)"
|
| 142 |
+
echo "令牌: ${OPENCLAW_GATEWAY_PASSWORD:0:3}***"
|
| 143 |
+
echo "Tavily: ${TAVILY_API_KEY:0:5}***"
|
|
|
|
| 144 |
|
| 145 |
echo ""
|
| 146 |
+
echo "=== 8. 启动后台任务与主服务 ==="
|
| 147 |
+
# 定时备份任务
|
| 148 |
(
|
|
|
|
| 149 |
while true; do
|
| 150 |
sleep 3600
|
| 151 |
+
python3 /app/sync.py backup && echo "[$(date)] 备份完成" || echo "[$(date)] 备份失败" >&2
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
done
|
| 153 |
) &
|
|
|
|
|
|
|
| 154 |
|
| 155 |
echo ""
|
| 156 |
echo "======================================"
|
| 157 |
+
echo "启动 OpenClaw 网关..."
|
|
|
|
| 158 |
echo "======================================"
|
| 159 |
echo ""
|
| 160 |
exec openclaw gateway run --port "$PORT"
|