yangtb24 commited on
Commit
e1243b4
·
verified ·
1 Parent(s): 47c9490

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +66 -91
sync_data.sh CHANGED
@@ -1,108 +1,80 @@
1
-
2
-
3
  # 检查必要的环境变量
4
- if [ -z "$G_NAME" ] || [ -z "$G_TOKEN" ]; then
5
- echo "缺少必要的环境变量 G_NAMEG_TOKEN"
6
  exit 1
7
  fi
8
 
9
- # 解析仓库名和用户名
10
- IFS='/' read -r GITHUB_USER GITHUB_REPO <<< "$G_NAME"
11
-
12
- # 构建 GitHub 仓库的克隆 URL,包含令牌
13
- REPO_URL="https://${G_TOKEN}@github.com/${G_NAME}.git"
14
- mkdir -p ./data/github_data
15
- # 克隆仓库
16
- echo "正在克隆仓库……"
17
- git clone "$REPO_URL" ./data/github_data || {
18
- echo "克隆失败,请检查 G_NAME 和 G_TOKEN 是否正确。"
19
- exit 1
20
- }
21
-
22
- if [ -f ./data/github_data/webui.db ]; then
23
- cp ./data/github_data/webui.db ./data/webui.db
24
- echo "从 GitHub 仓库中拉取成功"
25
- else
26
- echo "GitHub 仓库中未找到 webui.db,将在同步时推送"
27
- fi
28
-
29
  # 定义同步函数
30
  sync_data() {
31
  while true; do
32
- # 1. 同步到 GitHub
33
- echo "正在开始同步"
34
- # 进入仓库目录
35
- cd ./data/github_data
36
- # 配置 Git 用户信息
37
- git config user.name "AutoSync Bot"
38
- git config user.email "autosync@bot.com"
 
 
 
 
 
 
 
 
 
 
39
 
40
- # 确保在正确的分支
41
- git checkout main || git checkout master
 
 
 
 
 
 
 
 
 
42
 
43
- # 复制最新的数据库文件
44
- # cp ../webui.db ./webui.db
45
-
46
- if [ -f "../webui.db" ]; then
47
- cp ../webui.db ./webui.db
48
- else
49
- echo "数据库尚未初始化"
50
- fi
51
-
52
- # 检查是否有变化
53
- if [[ -n $(git status -s) ]]; then
54
- # 添加所有变更
55
- git add webui.db
56
 
57
- # 提交变更
58
- git commit -m "Auto sync webui.db $(date '+%Y-%m-%d %H:%M:%S')"
 
 
59
 
60
- # 推送到远程仓库
61
- git push origin HEAD && {
62
- echo "GitHub推送成功"
63
- }|| {
64
- echo "推送失败,等待重试..."
65
- sleep 10
66
- git push origin HEAD || {
67
- echo "重试失败,放弃推送到Github。"
 
 
 
 
 
 
 
 
 
68
  }
69
- }
70
- # 返回上级目录
71
- cd ..
72
- cd ..
73
-
74
- # 2. 同步到 WebDAV
75
- if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
76
- echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
77
  else
78
- echo "同步到 WebDAV..."
79
- FILENAME="webui_$(date +'%m_%d').db"
80
- # 检查是否存在要上传的文件
81
- if [ -f ./data/webui.db ]; then
82
- # 使用 curl 进行文件上传
83
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
84
- echo "WebDAV 上传成功"
85
- } || {
86
- echo "WebDAV 上传失败,等待重试..."
87
- sleep 10
88
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || {
89
- echo "重试失败,放弃webdav上传。"
90
- }
91
- }
92
- else
93
- echo "未找到 webui.db 文件,跳过 WebDAV 同步"
94
- fi
95
  fi
96
-
97
-
98
- else
99
- # 返回上级目录
100
- cd ..
101
- cd ..
102
- echo "GitHub: 没有检测到数据库变化"
103
  fi
104
- # 3. 等待统一的时间间隔
105
- SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒
 
106
  echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
107
  echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..."
108
  sleep $SYNC_INTERVAL
@@ -110,5 +82,8 @@ sync_data() {
110
  done
111
  }
112
 
 
 
 
113
  # 后台启动同步进程
114
- sync_data &
 
 
 
1
  # 检查必要的环境变量
2
+ if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
3
+ echo "缺少必要的环境变量 WEBDAV_URL、WEBDAV_USERNAMEWEBDAV_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]\{4\}_[0-9]\{2\}_[0-9]\{2\}.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_*.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').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]\{4\}_[0-9]\{2\}_[0-9]\{2\}.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
  done
83
  }
84
 
85
+ # 确保 ./data 目录存在
86
+ mkdir -p ./data
87
+
88
  # 后台启动同步进程
89
+ sync_data &