yangtb24 commited on
Commit
1485b47
·
verified ·
1 Parent(s): 99d514e

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +43 -64
sync_data.sh CHANGED
@@ -4,77 +4,58 @@ if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD"
4
  exit 1
5
  fi
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # 定义同步函数
8
  sync_data() {
9
  while true; do
10
- # 1. WebDAV 下载最新的备份(可选)
11
- # 如需要每次同步前都下载最新备份,请取消下面代码的注释
12
- # echo "正在从 WebDAV 下载最新的备份..."
13
- # LATEST_FILE=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}.db' | sort -r | head -n 1)
14
- # if [ -n "$LATEST_FILE" ]; then
15
- # curl -o ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$LATEST_FILE" && {
16
- # echo "从 WebDAV 下载最新备份成功"
17
- # } || {
18
- # echo "从 WebDAV 下载最新备份失败,等待重试..."
19
- # sleep 10
20
- # curl -o ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$LATEST_FILE" || {
21
- # echo "重试失败,放弃下载最新备份。"
22
- # }
23
- # }
24
- # else
25
- # echo "WebDAV 上未找到 webui_[0-9]\{8\}_[0-9]\{4\}.db 文件"
26
- # fi
27
 
28
- # 2. 同步到 WebDAV
29
- if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
30
- echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
31
- else
32
- echo "同步到 WebDAV..."
33
- FILENAME="webui_$(date +'%Y%m%d_%H%M').db" # 修改文件名格式,添加小时和分钟
34
- # 检查是否存在要上传的文件
35
- if [ -f ./data/webui.db ]; then
36
- # 使用 curl 进行文件上传
37
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
38
- echo "WebDAV 上传成功"
39
 
40
- # 3. 删除旧的备份
41
- echo "正在删除旧的备份..."
42
- # 获取 WebDAV 上的备份文件列表
43
- FILES=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}.db' | sort) # 修改文件名匹配规则
44
- # 计算需要删除的文件数量
45
- NUM_FILES=$(echo "$FILES" | wc -l)
46
- NUM_TO_DELETE=$((NUM_FILES - 12))
47
 
48
- # 如果需要删除的文件数量大于 0,则执行删除操作
49
- if [ "$NUM_TO_DELETE" -gt 0 ]; then
50
- # 使用 head 命令获取需要删除的文件列表
51
- FILES_TO_DELETE=$(echo "$FILES" | head -n "$NUM_TO_DELETE")
52
 
53
- # 循环删除文件
54
- while read -r FILE; do
55
- curl -X DELETE --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILE" && {
56
- echo "已删除 $FILE"
57
- } || {
58
- echo "删除 $FILE 失败"
59
- }
60
- done <<< "$FILES_TO_DELETE"
61
- else
62
- echo "没有需要删除的备份文件"
63
- fi
64
- } || {
65
- echo "WebDAV 上传失败,等待重试..."
66
- sleep 10
67
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || {
68
- echo "重试失败,放弃webdav上传。"
69
- }
70
  }
71
- else
72
- echo "未找到 webui.db 文件,跳过 WebDAV 同步"
73
- fi
74
  fi
75
 
76
- # 4. 等待统一的时间间隔
77
- SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒 (2小时)
78
  echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
79
  echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..."
80
  sleep $SYNC_INTERVAL
@@ -82,8 +63,6 @@ sync_data() {
82
  done
83
  }
84
 
85
- # 确保 ./data 目录存在
86
- mkdir -p ./data
87
-
88
  # 后台启动同步进程
89
  sync_data &
 
 
4
  exit 1
5
  fi
6
 
7
+ # 创建数据目录
8
+ mkdir -p ./data
9
+
10
+ # 从 WebDAV 拉取最新的备份
11
+ echo "正在从 WebDAV 拉取备份..."
12
+ LATEST_BACKUP=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}\.db' | sort -r | head -n 1)
13
+
14
+ if [ -n "$LATEST_BACKUP" ]; then
15
+ curl -o ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$LATEST_BACKUP"
16
+ echo "已从 WebDAV 拉取备份: $LATEST_BACKUP"
17
+ else
18
+ echo "WebDAV 上未找到备份文件,将创建新的数据库。"
19
+ fi
20
+
21
  # 定义同步函数
22
  sync_data() {
23
  while true; do
24
+ # 1. 同步到 WebDAV
25
+ echo "正在开始同步..."
26
+ FILENAME="webui_$(date +'%Y%m%d_%H%M').db"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
+ # 检查是否存在要上传的文件
29
+ if [ -f ./data/webui.db ]; then
30
+ # 使用 curl 进行文件上传
31
+ curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
32
+ echo "WebDAV 上传成功: $FILENAME"
 
 
 
 
 
 
33
 
34
+ # 获取 WebDAV 上的所有备份文件
35
+ BACKUP_FILES=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}\.db' | sort)
 
 
 
 
 
36
 
37
+ # 统计备份文件数量
38
+ NUM_BACKUPS=$(echo "$BACKUP_FILES" | wc -l)
 
 
39
 
40
+ # 如果备份文件数量超过 20 个,则删除最旧的备份
41
+ if (( NUM_BACKUPS > 20 )); then
42
+ OLDEST_BACKUP=$(echo "$BACKUP_FILES" | head -n 1)
43
+ curl -X DELETE --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$OLDEST_BACKUP"
44
+ echo "已删除最旧的备份: $OLDEST_BACKUP"
45
+ fi
46
+ } || {
47
+ echo "WebDAV 上传失败,等待重试..."
48
+ sleep 10
49
+ curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || {
50
+ echo "重试失败,放弃 webdav 上传。"
 
 
 
 
 
 
51
  }
52
+ }
53
+ else
54
+ echo "未找到 webui.db 文件,跳过 WebDAV 同步"
55
  fi
56
 
57
+ # 2. 等待统一的时间间隔
58
+ SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
59
  echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
60
  echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..."
61
  sleep $SYNC_INTERVAL
 
63
  done
64
  }
65
 
 
 
 
66
  # 后台启动同步进程
67
  sync_data &
68
+ wait