wuran commited on
Commit
1522564
·
verified ·
1 Parent(s): a7d4b4c

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +132 -315
sync_data.sh CHANGED
@@ -12,14 +12,12 @@ mkdir -p "$WORK_DIR"
12
 
13
  # 从 WebDAV 恢复配置的函数
14
  restore_from_webdav() {
15
-
16
-
17
-
18
-
19
-
20
  echo "正在从 WebDAV 恢复配置文件..."
21
 
22
  # 创建临时恢复目录
 
 
 
23
  # 获取WebDAV上所有备份文件列表
24
  echo "获取 WebDAV 备份文件列表..."
25
 
@@ -27,118 +25,118 @@ restore_from_webdav() {
27
  RAW_RESPONSE=$(curl -s -X PROPFIND \
28
  --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
29
  -H "Depth: 1" \
 
 
 
 
 
 
 
30
  fi
31
 
32
  # 多种匹配方式
33
-
34
  BACKUP_LIST1=$(echo "$RAW_RESPONSE" | grep -oE '<D:displayname[^>]*>[^<]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^<]*</D:displayname>' | sed 's/<[^>]*>//g')
35
-
36
-
37
  BACKUP_LIST2=$(echo "$RAW_RESPONSE" | grep -oE 'href="[^"]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^"]*"' | sed 's/.*href="[^"]*\///g' | sed 's/".*//g')
38
-
39
-
40
  BACKUP_LIST3=$(echo "$RAW_RESPONSE" | grep -oE 'mcp_backup_[0-9]+_[0-9]+\.tar\.gz')
41
 
42
  # 合并所有结果
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  return 0
44
  }
45
 
46
  # 处理恢复参数
47
  if [ "$1" = "--restore-only" ] && [ "$2" = "webdav" ]; then
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
  restore_from_webdav
83
  exit 0
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
  fi
143
 
144
  # 启动时自动从WebDAV恢复
@@ -158,32 +156,10 @@ sync_data() {
158
 
159
  while true; do
160
  echo "正在开始同步检查"
161
-
162
-
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
 
174
  # 检查config和tools目录变化
175
  CONFIG_CHANGED=0
176
  TOOLS_CHANGED=0
177
-
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
-
186
-
187
 
188
  # 检查config目录变化
189
  if [ -d "/mcp-proxy-server/config" ] && [ "$(ls -A /mcp-proxy-server/config 2>/dev/null)" ]; then
@@ -193,15 +169,10 @@ sync_data() {
193
 
194
  # 获取上次记录的时间
195
  LAST_CONFIG_TIME=$(cat "$CONFIG_LAST_CHECK_FILE" 2>/dev/null || echo 0)
196
-
197
-
198
 
199
  if [ "$CURRENT_CONFIG_TIME" -gt "$LAST_CONFIG_TIME" ]; then
200
  CONFIG_CHANGED=1
201
  echo "检测到 config 目录变化"
202
-
203
-
204
-
205
  fi
206
  fi
207
 
@@ -217,12 +188,6 @@ sync_data() {
217
  if [ "$CURRENT_TOOLS_TIME" -gt "$LAST_TOOLS_TIME" ]; then
218
  TOOLS_CHANGED=1
219
  echo "检测到 tools 目录变化"
220
-
221
-
222
-
223
-
224
-
225
-
226
  fi
227
  fi
228
 
@@ -232,21 +197,6 @@ sync_data() {
232
 
233
  # 使用时间戳创建备份文件名
234
  FILENAME="mcp_backup_$(date +'%Y%m%d_%H%M').tar.gz"
235
-
236
-
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
 
251
  # 创建临时备份压缩包
252
  TEMP_DIR="$WORK_DIR/temp_backup"
@@ -255,14 +205,6 @@ sync_data() {
255
 
256
  # 复制要备份的目录到临时目录
257
  BACKUP_CREATED=0
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
-
266
 
267
  # 备份config目录(排除工作目录)
268
  if [ -d "/mcp-proxy-server/config" ] && [ "$(ls -A /mcp-proxy-server/config 2>/dev/null)" ]; then
@@ -270,6 +212,8 @@ sync_data() {
270
  for item in /mcp-proxy-server/config/*; do
271
  if [ -e "$item" ]; then
272
  BASENAME=$(basename "$item")
 
 
273
  ;;
274
  *)
275
  if [ -d "$item" ]; then
@@ -282,16 +226,6 @@ sync_data() {
282
  fi
283
  done
284
  fi
285
-
286
-
287
-
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
 
296
  # 备份tools目录
297
  if [ -d "/tools" ] && [ "$(ls -A /tools 2>/dev/null)" ]; then
@@ -308,163 +242,22 @@ sync_data() {
308
  touch "$TEMP_DIR/tools/$BASENAME/.gitkeep"
309
  BACKUP_CREATED=1
310
  fi
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
-
330
-
331
  else
332
  cp "$item" "$TEMP_DIR/tools/" 2>/dev/null && BACKUP_CREATED=1
333
-
334
-
335
  fi
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
  fi
344
  done
345
-
346
-
347
-
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
  fi
400
 
401
  # 创建压缩包并上传
402
  if [ "$BACKUP_CREATED" = "1" ] && [ "$(ls -A $TEMP_DIR)" ]; then
403
  (cd "$TEMP_DIR" && tar -czf "../$FILENAME" .)
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
-
429
-
430
-
431
-
432
-
433
-
434
-
435
-
436
-
437
-
438
-
439
-
440
 
441
  if curl -T "$WORK_DIR/$FILENAME" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" >/dev/null 2>&1; then
442
  echo "WebDAV备份上传成功: $FILENAME"
443
  # 更新记录文件
444
  [ "$CONFIG_CHANGED" = "1" ] && echo "$CURRENT_CONFIG_TIME" > "$CONFIG_LAST_CHECK_FILE"
445
  [ "$TOOLS_CHANGED" = "1" ] && echo "$CURRENT_TOOLS_TIME" > "$TOOLS_LAST_CHECK_FILE"
446
-
447
-
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
-
460
-
461
-
462
-
463
-
464
-
465
-
466
-
467
-
468
  else
469
  echo "WebDAV备份上传失败"
470
  fi
@@ -474,18 +267,42 @@ sync_data() {
474
  fi
475
 
476
  rm -rf "$TEMP_DIR"
477
-
478
  else
479
  echo "无文件变化,跳过备份"
480
  fi
481
 
482
  # 等待下一次检查
483
-
484
-
485
-
486
  SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
487
  echo "等待 ${SYNC_INTERVAL} 秒后进行下一次检查..."
488
  sleep $SYNC_INTERVAL
489
-
490
  done
491
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
  # 从 WebDAV 恢复配置的函数
14
  restore_from_webdav() {
 
 
 
 
 
15
  echo "正在从 WebDAV 恢复配置文件..."
16
 
17
  # 创建临时恢复目录
18
+ RESTORE_DIR="$WORK_DIR/webdav_restore"
19
+ mkdir -p "$RESTORE_DIR"
20
+
21
  # 获取WebDAV上所有备份文件列表
22
  echo "获取 WebDAV 备份文件列表..."
23
 
 
25
  RAW_RESPONSE=$(curl -s -X PROPFIND \
26
  --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
27
  -H "Depth: 1" \
28
+ -H "Content-Type: text/xml" \
29
+ -d '<?xml version="1.0" encoding="utf-8"?><propfind xmlns="DAV:"><prop><displayname/></prop></propfind>' \
30
+ "$WEBDAV_URL/")
31
+
32
+ # 如果PROPFIND失败,尝试简单的GET请求
33
+ if [ -z "$RAW_RESPONSE" ] || echo "$RAW_RESPONSE" | grep -q "Method Not Allowed"; then
34
+ RAW_RESPONSE=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/")
35
  fi
36
 
37
  # 多种匹配方式
 
38
  BACKUP_LIST1=$(echo "$RAW_RESPONSE" | grep -oE '<D:displayname[^>]*>[^<]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^<]*</D:displayname>' | sed 's/<[^>]*>//g')
 
 
39
  BACKUP_LIST2=$(echo "$RAW_RESPONSE" | grep -oE 'href="[^"]*mcp_backup_[0-9]+_[0-9]+\.tar\.gz[^"]*"' | sed 's/.*href="[^"]*\///g' | sed 's/".*//g')
 
 
40
  BACKUP_LIST3=$(echo "$RAW_RESPONSE" | grep -oE 'mcp_backup_[0-9]+_[0-9]+\.tar\.gz')
41
 
42
  # 合并所有结果
43
+ BACKUP_LIST=$(printf "%s\n%s\n%s\n" "$BACKUP_LIST1" "$BACKUP_LIST2" "$BACKUP_LIST3" | grep -v '^$' | sort -u | sort -r)
44
+
45
+ if [ -z "$BACKUP_LIST" ]; then
46
+ echo "未找到任何备份文件"
47
+ rm -rf "$RESTORE_DIR"
48
+ return 1
49
+ fi
50
+
51
+ echo "找到以下备份文件:"
52
+ echo "$BACKUP_LIST" | head -5 | while read file; do echo " - $file"; done
53
+ if [ $(echo "$BACKUP_LIST" | wc -l) -gt 5 ]; then
54
+ echo " ... 等共 $(echo "$BACKUP_LIST" | wc -l) 个文件"
55
+ fi
56
+
57
+ # 尝试下载最新的备份文件
58
+ LATEST_BACKUP=$(echo "$BACKUP_LIST" | head -1)
59
+ echo "尝试下载最新备份: $LATEST_BACKUP"
60
+
61
+ if curl -f --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$LATEST_BACKUP" -o "$RESTORE_DIR/$LATEST_BACKUP" 2>/dev/null; then
62
+ echo "下载备份成功: $LATEST_BACKUP"
63
+
64
+ # 解压缩备份文件
65
+ cd "$RESTORE_DIR"
66
+ tar -xzf "$LATEST_BACKUP" && {
67
+ echo "解压缩备份文件成功"
68
+
69
+ # 恢复配置文件
70
+ if [ -d "config" ] && [ "$(ls -A config 2>/dev/null)" ]; then
71
+ echo "恢复 config 目录..."
72
+ mkdir -p /mcp-proxy-server/config
73
+ cp -r config/* /mcp-proxy-server/config/
74
+ echo "config 目录恢复成功"
75
+ else
76
+ echo "备份中没有 config 目录或目录为空"
77
+ fi
78
+
79
+ if [ -d "tools" ] && [ "$(ls -A tools 2>/dev/null)" ]; then
80
+ echo "恢复 tools 目录..."
81
+ mkdir -p /tools
82
+ cp -r tools/* /tools/
83
+ echo "tools 目录恢复成功"
84
+ else
85
+ echo "备份中没有 tools 目录或目录为空"
86
+ fi
87
+
88
+ echo "从 WebDAV 恢复配置文件完成"
89
+ } || {
90
+ echo "解压缩备份文件失败"
91
+ }
92
+ cd - > /dev/null
93
+ else
94
+ echo "下载最新备份失败,尝试其他备份文件..."
95
+
96
+ # 尝试前3个备份文件
97
+ SUCCESS=0
98
+ for backup_file in $(echo "$BACKUP_LIST" | head -3 | tail -n +2); do
99
+ echo "尝试下载: $backup_file"
100
+ if curl -f --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$backup_file" -o "$RESTORE_DIR/$backup_file" 2>/dev/null; then
101
+ echo "下载成功,开始解压..."
102
+ cd "$RESTORE_DIR"
103
+ if tar -xzf "$backup_file"; then
104
+ echo "解压成功,恢复文件..."
105
+
106
+ # 恢复配置文件
107
+ if [ -d "config" ] && [ "$(ls -A config 2>/dev/null)" ]; then
108
+ mkdir -p /mcp-proxy-server/config
109
+ cp -r config/* /mcp-proxy-server/config/
110
+ echo "config 目录恢复成功"
111
+ fi
112
+
113
+ if [ -d "tools" ] && [ "$(ls -A tools 2>/dev/null)" ]; then
114
+ mkdir -p /tools
115
+ cp -r tools/* /tools/
116
+ echo "tools 目录恢复成功"
117
+ fi
118
+
119
+ SUCCESS=1
120
+ break
121
+ fi
122
+ cd - > /dev/null
123
+ fi
124
+ done
125
+
126
+ if [ "$SUCCESS" = "0" ]; then
127
+ echo "无法下载任何可用的备份文件"
128
+ fi
129
+ fi
130
+
131
+ # 清理临时目录
132
+ rm -rf "$RESTORE_DIR"
133
  return 0
134
  }
135
 
136
  # 处理恢复参数
137
  if [ "$1" = "--restore-only" ] && [ "$2" = "webdav" ]; then
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  restore_from_webdav
139
  exit 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  fi
141
 
142
  # 启动时自动从WebDAV恢复
 
156
 
157
  while true; do
158
  echo "正在开始同步检查"
 
 
 
 
 
 
 
 
 
 
 
 
159
 
160
  # 检查config和tools目录变化
161
  CONFIG_CHANGED=0
162
  TOOLS_CHANGED=0
 
 
 
 
 
 
 
 
 
 
163
 
164
  # 检查config目录变化
165
  if [ -d "/mcp-proxy-server/config" ] && [ "$(ls -A /mcp-proxy-server/config 2>/dev/null)" ]; then
 
169
 
170
  # 获取上次记录的时间
171
  LAST_CONFIG_TIME=$(cat "$CONFIG_LAST_CHECK_FILE" 2>/dev/null || echo 0)
 
 
172
 
173
  if [ "$CURRENT_CONFIG_TIME" -gt "$LAST_CONFIG_TIME" ]; then
174
  CONFIG_CHANGED=1
175
  echo "检测到 config 目录变化"
 
 
 
176
  fi
177
  fi
178
 
 
188
  if [ "$CURRENT_TOOLS_TIME" -gt "$LAST_TOOLS_TIME" ]; then
189
  TOOLS_CHANGED=1
190
  echo "检测到 tools 目录变化"
 
 
 
 
 
 
191
  fi
192
  fi
193
 
 
197
 
198
  # 使用时间戳创建备份文件名
199
  FILENAME="mcp_backup_$(date +'%Y%m%d_%H%M').tar.gz"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
 
201
  # 创建临时备份压缩包
202
  TEMP_DIR="$WORK_DIR/temp_backup"
 
205
 
206
  # 复制要备份的目录到临时目录
207
  BACKUP_CREATED=0
 
 
 
 
 
 
 
 
208
 
209
  # 备份config目录(排除工作目录)
210
  if [ -d "/mcp-proxy-server/config" ] && [ "$(ls -A /mcp-proxy-server/config 2>/dev/null)" ]; then
 
212
  for item in /mcp-proxy-server/config/*; do
213
  if [ -e "$item" ]; then
214
  BASENAME=$(basename "$item")
215
+ case "$BASENAME" in
216
+ github_data|temp_backup|webdav_restore)
217
  ;;
218
  *)
219
  if [ -d "$item" ]; then
 
226
  fi
227
  done
228
  fi
 
 
 
 
 
 
 
 
 
 
229
 
230
  # 备份tools目录
231
  if [ -d "/tools" ] && [ "$(ls -A /tools 2>/dev/null)" ]; then
 
242
  touch "$TEMP_DIR/tools/$BASENAME/.gitkeep"
243
  BACKUP_CREATED=1
244
  fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  else
246
  cp "$item" "$TEMP_DIR/tools/" 2>/dev/null && BACKUP_CREATED=1
 
 
247
  fi
 
 
 
 
 
 
 
248
  fi
249
  done
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  fi
251
 
252
  # 创建压缩包并上传
253
  if [ "$BACKUP_CREATED" = "1" ] && [ "$(ls -A $TEMP_DIR)" ]; then
254
  (cd "$TEMP_DIR" && tar -czf "../$FILENAME" .)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
 
256
  if curl -T "$WORK_DIR/$FILENAME" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" >/dev/null 2>&1; then
257
  echo "WebDAV备份上传成功: $FILENAME"
258
  # 更新记录文件
259
  [ "$CONFIG_CHANGED" = "1" ] && echo "$CURRENT_CONFIG_TIME" > "$CONFIG_LAST_CHECK_FILE"
260
  [ "$TOOLS_CHANGED" = "1" ] && echo "$CURRENT_TOOLS_TIME" > "$TOOLS_LAST_CHECK_FILE"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  else
262
  echo "WebDAV备份上传失败"
263
  fi
 
267
  fi
268
 
269
  rm -rf "$TEMP_DIR"
 
270
  else
271
  echo "无文件变化,跳过备份"
272
  fi
273
 
274
  # 等待下一次检查
 
 
 
275
  SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
276
  echo "等待 ${SYNC_INTERVAL} 秒后进行下一次检查..."
277
  sleep $SYNC_INTERVAL
 
278
  done
279
+ }
280
+
281
+ # 后台启动同步进程
282
+ sync_data &
283
+
284
+ echo "同步进程已在后台启动 (PID: $!)"
285
+ echo "现在启动 MCP Proxy 主程序..."
286
+
287
+ # 启动原始的 MCP Proxy 程序
288
+ echo "准备启动 MCP Proxy,端口: ${PORT:-7860},主机: ${HOST:-0.0.0.0}"
289
+
290
+ if [ -f build/sse.js ]; then
291
+ echo "启动: node build/sse.js"
292
+ PORT=${PORT:-7860} HOST=${HOST:-0.0.0.0} exec node build/sse.js
293
+ elif [ -f /app/build/sse.js ]; then
294
+ echo "启动: node /app/build/sse.js"
295
+ PORT=${PORT:-7860} HOST=${HOST:-0.0.0.0} exec node /app/build/sse.js
296
+ elif [ -f /mcp-proxy-server/build/sse.js ]; then
297
+ echo "启动: node /mcp-proxy-server/build/sse.js"
298
+ PORT=${PORT:-7860} HOST=${HOST:-0.0.0.0} exec node /mcp-proxy-server/build/sse.js
299
+ else
300
+ echo "错误: 找不到 build/sse.js 文件"
301
+ echo "当前目录: $(pwd)"
302
+ echo "查找可能的 Node.js 文件:"
303
+ find / -name "sse.js" -type f 2>/dev/null | head -5
304
+
305
+ # 如果找不到,保持容器运行以便调试
306
+ echo "保持容器运行以便调试..."
307
+ tail -f /dev/null
308
+ fi