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')"
|