Spaces:
Running
Running
Update sync_data.sh
Browse files- sync_data.sh +102 -95
sync_data.sh
CHANGED
|
@@ -142,10 +142,10 @@ if [ "$RESTORE_SOURCE" = "webdav" ]; then
|
|
| 142 |
# 仅从 WebDAV 恢复
|
| 143 |
restore_from_webdav
|
| 144 |
elif [ "$RESTORE_SOURCE" = "github" ] || [ "$RESTORE_SOURCE" = "auto" ]; then
|
| 145 |
-
#
|
| 146 |
GITHUB_RESTORED=0
|
| 147 |
|
| 148 |
-
echo "
|
| 149 |
|
| 150 |
# 检查并恢复 config 目录
|
| 151 |
if [ -d "$GITHUB_DATA_DIR/config" ] && [ "$(ls -A $GITHUB_DATA_DIR/config 2>/dev/null)" ]; then
|
|
@@ -158,25 +158,21 @@ elif [ "$RESTORE_SOURCE" = "github" ] || [ "$RESTORE_SOURCE" = "auto" ]; then
|
|
| 158 |
echo "GitHub 仓库中没有 config 目录或目录为空"
|
| 159 |
fi
|
| 160 |
|
| 161 |
-
|
| 162 |
-
if [ -d "$GITHUB_DATA_DIR/tools" ] && [ "$(ls -A $GITHUB_DATA_DIR/tools 2>/dev/null)" ]; then
|
| 163 |
-
echo "从 GitHub 恢复 tools 目录..."
|
| 164 |
-
mkdir -p /tools
|
| 165 |
-
cp -r "$GITHUB_DATA_DIR/tools"/* /tools/
|
| 166 |
-
echo "GitHub: tools 目录恢复成功"
|
| 167 |
-
GITHUB_RESTORED=1
|
| 168 |
-
else
|
| 169 |
-
echo "GitHub 仓库中没有 tools 目录或目录为空"
|
| 170 |
-
fi
|
| 171 |
|
| 172 |
-
# 如果是 auto
|
| 173 |
-
if [ "$RESTORE_SOURCE" = "auto" ]
|
| 174 |
-
echo "
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
elif [ "$GITHUB_RESTORED" = "1" ]; then
|
| 177 |
-
echo "从 GitHub
|
| 178 |
else
|
| 179 |
-
echo "GitHub
|
| 180 |
fi
|
| 181 |
fi
|
| 182 |
|
|
@@ -200,99 +196,104 @@ sync_data() {
|
|
| 200 |
git checkout main || git checkout master
|
| 201 |
|
| 202 |
# 复制最新的配置文件
|
| 203 |
-
echo "
|
| 204 |
|
| 205 |
# 创建仓库中的目录
|
| 206 |
mkdir -p ./config
|
| 207 |
-
mkdir -p ./tools
|
| 208 |
|
| 209 |
-
#
|
| 210 |
-
if [ -d "/mcp-proxy-server/config" ]
|
| 211 |
-
#
|
| 212 |
-
|
| 213 |
-
else
|
| 214 |
-
echo "/mcp-proxy-server/config 目录不存在或为空"
|
| 215 |
-
fi
|
| 216 |
-
|
| 217 |
-
if [ -d "/tools" ]; then
|
| 218 |
-
echo "检查 /tools 目录内容..."
|
| 219 |
-
ls -la /tools/ | head -10
|
| 220 |
|
| 221 |
-
if [
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
# 清空目标目录,确保完全同步
|
| 225 |
-
rm -rf ./tools/*
|
| 226 |
-
|
| 227 |
-
# 逐个处理 tools 目录下的项目
|
| 228 |
-
for item in /tools/*; do
|
| 229 |
if [ -e "$item" ]; then
|
| 230 |
BASENAME=$(basename "$item")
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
echo " -> 目录有内容,开始复��..."
|
| 243 |
-
cp -r "$item"/* "./tools/$BASENAME/" 2>/dev/null && echo " -> tools 目录 $BASENAME 复制成功" || echo " -> tools 目录 $BASENAME 复制失败"
|
| 244 |
-
|
| 245 |
-
# 也复制隐藏文件
|
| 246 |
-
cp -r "$item"/.[!.]* "./tools/$BASENAME/" 2>/dev/null || true
|
| 247 |
-
|
| 248 |
-
echo " -> 检查复制结果:"
|
| 249 |
-
ls -la "./tools/$BASENAME/" | head -5
|
| 250 |
-
else
|
| 251 |
-
echo " -> 目录为空,创建空目录"
|
| 252 |
-
touch "./tools/$BASENAME/.gitkeep" # 确保空目录被Git跟踪
|
| 253 |
-
fi
|
| 254 |
-
else
|
| 255 |
-
echo " -> 这是一个文件,直接复制"
|
| 256 |
-
cp "$item" "./tools/" 2>/dev/null && echo " -> tools 文件 $BASENAME 复制成功" || echo " -> tools 文件 $BASENAME 复制失败"
|
| 257 |
-
fi
|
| 258 |
fi
|
| 259 |
done
|
| 260 |
-
|
| 261 |
-
echo "tools 目录同步完成,检查最终结果:"
|
| 262 |
-
find ./tools -type f | head -10
|
| 263 |
-
else
|
| 264 |
-
echo "/tools 目录为空"
|
| 265 |
fi
|
| 266 |
-
else
|
| 267 |
-
echo "/tools 目录不存在"
|
| 268 |
fi
|
| 269 |
|
|
|
|
|
|
|
| 270 |
# 检查是否有变化
|
|
|
|
|
|
|
|
|
|
|
|
|
| 271 |
if [[ -n $(git status -s) ]]; then
|
| 272 |
-
|
| 273 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
|
| 275 |
-
|
| 276 |
-
|
| 277 |
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
|
|
|
| 286 |
}
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
#
|
| 292 |
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
|
| 293 |
echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
|
| 294 |
else
|
| 295 |
-
echo "
|
| 296 |
# 使用时间戳(年月日时分),每次同步都创建新备份
|
| 297 |
FILENAME="mcp_backup_$(date +'%Y%m%d_%H%M').tar.gz"
|
| 298 |
|
|
@@ -301,7 +302,7 @@ sync_data() {
|
|
| 301 |
rm -rf "$TEMP_DIR" # 清理之前的临时目录
|
| 302 |
mkdir -p "$TEMP_DIR"
|
| 303 |
|
| 304 |
-
#
|
| 305 |
BACKUP_CREATED=0
|
| 306 |
|
| 307 |
if [ -d "/mcp-proxy-server/config" ]; then
|
|
@@ -395,12 +396,18 @@ sync_data() {
|
|
| 395 |
# 清理临时目录
|
| 396 |
rm -rf "$TEMP_DIR"
|
| 397 |
fi
|
|
|
|
|
|
|
| 398 |
|
| 399 |
else
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
echo "
|
| 403 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
| 404 |
# 3. 等待统一的时间间隔
|
| 405 |
SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
|
| 406 |
echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
|
|
|
|
| 142 |
# 仅从 WebDAV 恢复
|
| 143 |
restore_from_webdav
|
| 144 |
elif [ "$RESTORE_SOURCE" = "github" ] || [ "$RESTORE_SOURCE" = "auto" ]; then
|
| 145 |
+
# 从 GitHub 恢复(仅 config 目录)
|
| 146 |
GITHUB_RESTORED=0
|
| 147 |
|
| 148 |
+
echo "从 GitHub 恢复配置(仅 config 目录)..."
|
| 149 |
|
| 150 |
# 检查并恢复 config 目录
|
| 151 |
if [ -d "$GITHUB_DATA_DIR/config" ] && [ "$(ls -A $GITHUB_DATA_DIR/config 2>/dev/null)" ]; then
|
|
|
|
| 158 |
echo "GitHub 仓库中没有 config 目录或目录为空"
|
| 159 |
fi
|
| 160 |
|
| 161 |
+
echo "注意:GitHub 不包含 tools 目录(仅在 WebDAV 备份中)"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
|
| 163 |
+
# 如果是 auto 模式,GitHub 恢复 config 后,还需要从 WebDAV 恢复 tools
|
| 164 |
+
if [ "$RESTORE_SOURCE" = "auto" ]; then
|
| 165 |
+
echo "尝试从 WebDAV 恢复 tools 目录..."
|
| 166 |
+
# 临时修改为只恢复 tools 的 WebDAV 逻辑
|
| 167 |
+
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
|
| 168 |
+
echo "WebDAV 环境变量缺失,无法恢复 tools 目录"
|
| 169 |
+
else
|
| 170 |
+
restore_from_webdav || echo "WebDAV 恢复 tools 失败,将在同步时重新备份"
|
| 171 |
+
fi
|
| 172 |
elif [ "$GITHUB_RESTORED" = "1" ]; then
|
| 173 |
+
echo "从 GitHub 恢复 config 目录完成"
|
| 174 |
else
|
| 175 |
+
echo "GitHub 中没有可恢复的 config 目录"
|
| 176 |
fi
|
| 177 |
fi
|
| 178 |
|
|
|
|
| 196 |
git checkout main || git checkout master
|
| 197 |
|
| 198 |
# 复制最新的配置文件
|
| 199 |
+
echo "检查配置文件变化(GitHub 仅备份 config 目录)..."
|
| 200 |
|
| 201 |
# 创建仓库中的目录
|
| 202 |
mkdir -p ./config
|
|
|
|
| 203 |
|
| 204 |
+
# 只同步 config 目录到 GitHub(体积小,适合版本控制)
|
| 205 |
+
if [ -d "/mcp-proxy-server/config" ]; then
|
| 206 |
+
# 检查是否有非工作目录的文件
|
| 207 |
+
CONFIG_FILES=$(ls -A /mcp-proxy-server/config 2>/dev/null | grep -v -E '(github_data|temp_backup|webdav_restore)' || true)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
|
| 209 |
+
if [ -n "$CONFIG_FILES" ]; then
|
| 210 |
+
# 使用 cp 代替 rsync,逐步复制,排除工作目录
|
| 211 |
+
for item in /mcp-proxy-server/config/*; do
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
if [ -e "$item" ]; then
|
| 213 |
BASENAME=$(basename "$item")
|
| 214 |
+
case "$BASENAME" in
|
| 215 |
+
github_data|temp_backup|webdav_restore)
|
| 216 |
+
;;
|
| 217 |
+
*)
|
| 218 |
+
if [ -d "$item" ]; then
|
| 219 |
+
cp -r "$item" ./config/ 2>/dev/null
|
| 220 |
+
else
|
| 221 |
+
cp "$item" ./config/ 2>/dev/null
|
| 222 |
+
fi
|
| 223 |
+
;;
|
| 224 |
+
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
fi
|
| 226 |
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
fi
|
|
|
|
|
|
|
| 228 |
fi
|
| 229 |
|
| 230 |
+
echo "注意:tools 目录不同步到 GitHub(体积大,仅在 WebDAV 备份)"
|
| 231 |
+
|
| 232 |
# 检查是否有变化
|
| 233 |
+
CONFIG_CHANGED=0
|
| 234 |
+
TOOLS_CHANGED=0
|
| 235 |
+
|
| 236 |
+
# 检查 config 目录变化(用于 GitHub 备份)
|
| 237 |
if [[ -n $(git status -s) ]]; then
|
| 238 |
+
echo "检测到 config 目录变化"
|
| 239 |
+
CONFIG_CHANGED=1
|
| 240 |
+
fi
|
| 241 |
+
|
| 242 |
+
# 检查 tools 目录变化(用于 WebDAV 备份)
|
| 243 |
+
TOOLS_LAST_CHECK_FILE="$WORK_DIR/tools_last_check"
|
| 244 |
+
if [ -d "/tools" ] && [ "$(ls -A /tools 2>/dev/null)" ]; then
|
| 245 |
+
# 获取 tools 目录的最新修改时间
|
| 246 |
+
CURRENT_TOOLS_TIME=$(find /tools -type f -exec stat -c %Y {} \; 2>/dev/null | sort -n | tail -1)
|
| 247 |
+
|
| 248 |
+
if [ -f "$TOOLS_LAST_CHECK_FILE" ]; then
|
| 249 |
+
LAST_TOOLS_TIME=$(cat "$TOOLS_LAST_CHECK_FILE" 2>/dev/null || echo "0")
|
| 250 |
+
if [ "$CURRENT_TOOLS_TIME" != "$LAST_TOOLS_TIME" ]; then
|
| 251 |
+
echo "检测到 tools 目录变化"
|
| 252 |
+
TOOLS_CHANGED=1
|
| 253 |
+
fi
|
| 254 |
+
else
|
| 255 |
+
echo "首次检查 tools 目录"
|
| 256 |
+
TOOLS_CHANGED=1
|
| 257 |
+
fi
|
| 258 |
+
|
| 259 |
+
# 更新检查时间戳
|
| 260 |
+
echo "$CURRENT_TOOLS_TIME" > "$TOOLS_LAST_CHECK_FILE"
|
| 261 |
+
fi
|
| 262 |
+
|
| 263 |
+
# 根据变化情况执行备份
|
| 264 |
+
if [ "$CONFIG_CHANGED" = "1" ] || [ "$TOOLS_CHANGED" = "1" ]; then
|
| 265 |
+
echo "检测到文件变化,开始备份..."
|
| 266 |
+
echo " - Config 变化: $([ "$CONFIG_CHANGED" = "1" ] && echo "是" || echo "否")"
|
| 267 |
+
echo " - Tools 变化: $([ "$TOOLS_CHANGED" = "1" ] && echo "是" || echo "否")"
|
| 268 |
+
|
| 269 |
+
# GitHub 备份(仅当 config 有变化时)
|
| 270 |
+
if [ "$CONFIG_CHANGED" = "1" ]; then
|
| 271 |
+
echo "执行 GitHub 备份(config 目录)..."
|
| 272 |
+
# 添加所有变更
|
| 273 |
+
git add config/
|
| 274 |
|
| 275 |
+
# 提交变更
|
| 276 |
+
git commit -m "Auto sync config $(date '+%Y-%m-%d %H:%M:%S')"
|
| 277 |
|
| 278 |
+
# 推送到远程仓库
|
| 279 |
+
git push origin HEAD && {
|
| 280 |
+
echo "GitHub推送成功"
|
| 281 |
+
}|| {
|
| 282 |
+
echo "推送失败,等待重试..."
|
| 283 |
+
sleep 10
|
| 284 |
+
git push origin HEAD || {
|
| 285 |
+
echo "重试失败,放弃推送到Github。"
|
| 286 |
+
}
|
| 287 |
}
|
| 288 |
+
else
|
| 289 |
+
echo "跳过 GitHub 备份(config 无变化)"
|
| 290 |
+
fi
|
| 291 |
+
|
| 292 |
+
# WebDAV 备份(当 config 或 tools 有变化时)
|
| 293 |
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
|
| 294 |
echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
|
| 295 |
else
|
| 296 |
+
echo "执行 WebDAV 备份(config 和 tools 目录)..."
|
| 297 |
# 使用时间戳(年月日时分),每次同步都创建新备份
|
| 298 |
FILENAME="mcp_backup_$(date +'%Y%m%d_%H%M').tar.gz"
|
| 299 |
|
|
|
|
| 302 |
rm -rf "$TEMP_DIR" # 清理之前的临时目录
|
| 303 |
mkdir -p "$TEMP_DIR"
|
| 304 |
|
| 305 |
+
# 复制要备份的目录到临时目录(WebDAV 备份包含 config 和 tools)
|
| 306 |
BACKUP_CREATED=0
|
| 307 |
|
| 308 |
if [ -d "/mcp-proxy-server/config" ]; then
|
|
|
|
| 396 |
# 清理临时目录
|
| 397 |
rm -rf "$TEMP_DIR"
|
| 398 |
fi
|
| 399 |
+
|
| 400 |
+
echo "本次备份操作完成"
|
| 401 |
|
| 402 |
else
|
| 403 |
+
echo "没有检测到文件变化,跳过备份操作"
|
| 404 |
+
echo " - Config 变化: 否"
|
| 405 |
+
echo " - Tools 变化: 否"
|
| 406 |
fi
|
| 407 |
+
|
| 408 |
+
# 返回上级目录
|
| 409 |
+
cd - > /dev/null
|
| 410 |
+
|
| 411 |
# 3. 等待统一的时间间隔
|
| 412 |
SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
|
| 413 |
echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
|