Spaces:
Running
Running
Update sync_data.sh
Browse files- sync_data.sh +42 -19
sync_data.sh
CHANGED
@@ -19,31 +19,52 @@ restore_from_webdav() {
|
|
19 |
|
20 |
echo "正在从 WebDAV 恢复配置文件..."
|
21 |
|
22 |
-
# 获取今天的备份文件名
|
23 |
-
TODAY_FILENAME="mcp_backup_$(date +'%m_%d').tar.gz"
|
24 |
-
YESTERDAY_FILENAME="mcp_backup_$(date -d '1 day ago' +'%m_%d').tar.gz"
|
25 |
-
|
26 |
# 创建临时恢复目录
|
27 |
RESTORE_DIR="$WORK_DIR/webdav_restore"
|
28 |
mkdir -p "$RESTORE_DIR"
|
29 |
|
30 |
-
#
|
31 |
DOWNLOAD_SUCCESS=0 # 0 = 失败, 1 = 成功
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
DOWNLOAD_SUCCESS=1
|
43 |
-
echo "
|
44 |
-
|
45 |
-
echo "无法下载 WebDAV 备份文件"
|
46 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
fi
|
48 |
|
49 |
if [ "$DOWNLOAD_SUCCESS" = "1" ]; then
|
@@ -219,7 +240,8 @@ sync_data() {
|
|
219 |
echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
|
220 |
else
|
221 |
echo "同步到 WebDAV..."
|
222 |
-
|
|
|
223 |
|
224 |
# 创建临时备份压缩包(使用独立目录)
|
225 |
TEMP_DIR="$WORK_DIR/temp_backup"
|
@@ -247,9 +269,10 @@ sync_data() {
|
|
247 |
tar -czf "../$FILENAME" .
|
248 |
cd - > /dev/null
|
249 |
|
|
|
250 |
# 使用 curl 进行文件上传
|
251 |
curl -T "$WORK_DIR/$FILENAME" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
|
252 |
-
echo "WebDAV
|
253 |
} || {
|
254 |
echo "WebDAV 上传失败,等待重试..."
|
255 |
sleep 10
|
|
|
19 |
|
20 |
echo "正在从 WebDAV 恢复配置文件..."
|
21 |
|
|
|
|
|
|
|
|
|
22 |
# 创建临时恢复目录
|
23 |
RESTORE_DIR="$WORK_DIR/webdav_restore"
|
24 |
mkdir -p "$RESTORE_DIR"
|
25 |
|
26 |
+
# 尝试下载最近的备份文件(按时间倒序)
|
27 |
DOWNLOAD_SUCCESS=0 # 0 = 失败, 1 = 成功
|
28 |
|
29 |
+
# 计算同步间隔的分钟数
|
30 |
+
SYNC_INTERVAL_MINUTES=$((${SYNC_INTERVAL:-7200} / 60))
|
31 |
+
|
32 |
+
echo "根据同步间隔 ${SYNC_INTERVAL:-7200} 秒(${SYNC_INTERVAL_MINUTES}分钟)查找备份文件..."
|
33 |
+
|
34 |
+
# 尝试最近几个同步周期的备份
|
35 |
+
for i in $(seq 0 20); do # 最多尝试20个周期
|
36 |
+
# 计算备份时间点(向前推 i 个同步间隔)
|
37 |
+
MINUTES_AGO=$((i * SYNC_INTERVAL_MINUTES))
|
38 |
+
BACKUP_TIME=$(date -d "$MINUTES_AGO minutes ago" +'%Y%m%d_%H%M')
|
39 |
+
BACKUP_FILENAME="mcp_backup_$BACKUP_TIME.tar.gz"
|
40 |
+
|
41 |
+
echo "尝试下载备份: $BACKUP_FILENAME"
|
42 |
+
if curl -f --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$BACKUP_FILENAME" -o "$RESTORE_DIR/$BACKUP_FILENAME" 2>/dev/null; then
|
43 |
+
BACKUP_FILE="$BACKUP_FILENAME"
|
44 |
DOWNLOAD_SUCCESS=1
|
45 |
+
echo "下载备份成功: $BACKUP_FILENAME"
|
46 |
+
break
|
|
|
47 |
fi
|
48 |
+
done
|
49 |
+
|
50 |
+
# 如果按间隔没找到,尝试最近几个小时的备份(每5分钟一个点)
|
51 |
+
if [ "$DOWNLOAD_SUCCESS" = "0" ]; then
|
52 |
+
echo "按同步间隔未找到备份,尝试最近几个小时的备份..."
|
53 |
+
for minutes in $(seq 0 5 300); do # 0到300分钟,每5分钟一个点
|
54 |
+
BACKUP_TIME=$(date -d "$minutes minutes ago" +'%Y%m%d_%H%M')
|
55 |
+
BACKUP_FILENAME="mcp_backup_$BACKUP_TIME.tar.gz"
|
56 |
+
|
57 |
+
if curl -f --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$BACKUP_FILENAME" -o "$RESTORE_DIR/$BACKUP_FILENAME" 2>/dev/null; then
|
58 |
+
BACKUP_FILE="$BACKUP_FILENAME"
|
59 |
+
DOWNLOAD_SUCCESS=1
|
60 |
+
echo "找到备份文件: $BACKUP_FILENAME"
|
61 |
+
break
|
62 |
+
fi
|
63 |
+
done
|
64 |
+
fi
|
65 |
+
|
66 |
+
if [ "$DOWNLOAD_SUCCESS" = "0" ]; then
|
67 |
+
echo "无法找到任何可用的备份文件"
|
68 |
fi
|
69 |
|
70 |
if [ "$DOWNLOAD_SUCCESS" = "1" ]; then
|
|
|
240 |
echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
|
241 |
else
|
242 |
echo "同步到 WebDAV..."
|
243 |
+
# 使用时间戳(年月日时分),每次同步都创建新备份
|
244 |
+
FILENAME="mcp_backup_$(date +'%Y%m%d_%H%M').tar.gz"
|
245 |
|
246 |
# 创建临时备份压缩包(使用独立目录)
|
247 |
TEMP_DIR="$WORK_DIR/temp_backup"
|
|
|
269 |
tar -czf "../$FILENAME" .
|
270 |
cd - > /dev/null
|
271 |
|
272 |
+
echo "上传备份文件: $FILENAME (按 ${SYNC_INTERVAL:-7200} 秒间隔)"
|
273 |
# 使用 curl 进行文件上传
|
274 |
curl -T "$WORK_DIR/$FILENAME" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
|
275 |
+
echo "WebDAV 上传成功: $FILENAME"
|
276 |
} || {
|
277 |
echo "WebDAV 上传失败,等待重试..."
|
278 |
sleep 10
|