aBER0724 commited on
Commit
6a97fb5
·
verified ·
1 Parent(s): f18d20a

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. 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
- # 优先从 GitHub 恢复,即使只有部分内容
146
  GITHUB_RESTORED=0
147
 
148
- echo "优先检查 GitHub 仓库..."
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
- # 检查并恢复 tools 目录
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 模式且 GitHub 没有恢复任何内容,才尝试 WebDAV
173
- if [ "$RESTORE_SOURCE" = "auto" ] && [ "$GITHUB_RESTORED" = "0" ]; then
174
- echo "GitHub 中没有找到任何配置,尝试从 WebDAV 恢复..."
175
- restore_from_webdav || echo "WebDAV 恢复也失败,将在同步时推送当前配置"
 
 
 
 
 
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" ] && [ "$(ls -A /mcp-proxy-server/config 2>/dev/null | grep -v github_data)" ]; then
211
- # 排除 github_data 目录,避免嵌套
212
- rsync -av --exclude='github_data' --exclude='temp_backup' --exclude='webdav_restore' /mcp-proxy-server/config/ ./config/ 2>/dev/null && echo "config 目录同步成功" || echo "config 目录同步失败"
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 [ "$(ls -A /tools 2>/dev/null)" ]; then
222
- echo "发现 tools 文件,开始同步..."
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
- echo "处理 tools 项目: $BASENAME"
232
-
233
- if [ -d "$item" ]; then
234
- echo " -> 这是一个目录,检查内容..."
235
- ls -la "$item" | head -5
236
-
237
- # 创建目标目录
238
- mkdir -p "./tools/$BASENAME"
239
-
240
- # 复制目录内容,包括隐藏文件
241
- if [ "$(ls -A "$item" 2>/dev/null)" ]; then
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
- git add config/ tools/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
 
275
- # 提交变更
276
- git commit -m "Auto sync config and tools $(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
- # 返回上级目录
289
- cd - > /dev/null
290
-
291
- # 2. 同步到 WebDAV
292
  if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
293
  echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
294
  else
295
- echo "同步到 WebDAV..."
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
- cd - > /dev/null
402
- echo "GitHub: 没有检测到配置文件变化"
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')"