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
|