JerryZhouYG commited on
Commit
d0a963e
·
verified ·
1 Parent(s): 93409a3

Update sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +80 -77
sync_data.sh CHANGED
@@ -26,93 +26,96 @@ else
26
  echo "GitHub 仓库中未找到 webui.db,将在同步时推送"
27
  fi
28
 
29
- # 定义同步函数
30
  sync_data() {
31
  while true; do
32
- # 获取当前北京时间的小时
33
- current_hour=$(date -d "Asia/Shanghai" +%H)
34
-
35
- # 判断是否在北京时间 8:00-24:00 之间
36
- if (( current_hour >= 8 && current_hour <= 24 )); then
37
- # 1. 同步到 GitHub
38
- echo "正在开始同步到 GitHub"
39
- # 进入仓库目录
40
- cd ./data/github_data
41
- # 配置 Git 用户信息
42
- git config user.name "AutoSync Bot"
43
- git config user.email "[email protected]"
44
-
45
- # 确保在正确的分支
46
- git checkout main || git checkout master
47
-
48
- # 复制最新的数据库文件
49
- if [ -f "../webui.db" ]; then
50
- cp ../webui.db ./webui.db
51
- else
52
- echo "数据库尚未初始化"
53
- fi
54
-
55
- # 检查是否有变化
56
- if [[ -n $(git status -s) ]]; then
57
- # 添加所有变更
58
- git add webui.db
59
-
60
- # 提交变更
61
- git commit -m "Auto sync webui.db $(date '+%Y-%m-%d %H:%M:%S')"
62
 
63
- # 推送到远程仓库
64
- git push origin HEAD && {
65
- echo "GitHub推送成功"
66
- }|| {
67
- echo "GitHub 推送失败,等待重试..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  sleep 10
69
- git push origin HEAD || {
70
- echo "重试失败,放弃推送到Github。"
71
  }
72
  }
73
- # 返回上级目录
74
- cd ..
75
- cd ..
76
-
77
- # 2. 同步到 WebDAV
78
- if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
79
- echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
80
- else
81
- echo "同步到 WebDAV..."
82
- FILENAME="webui_$(date +'%m_%d').db"
83
- # 检查是否存在要上传的文件
84
- if [ -f ./data/webui.db ]; then
85
- # 使用 curl 进行文件上传
86
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
87
- echo "WebDAV 上传成功"
88
- } || {
89
- echo "WebDAV 上传失败,等待重试..."
90
- sleep 10
91
- curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || {
92
- echo "重试失败,放弃webdav上传。"
93
- }
94
- }
95
- else
96
- echo "未找到 webui.db 文件,跳过 WebDAV 同步"
97
- fi
98
- fi
99
-
100
-
101
  else
102
- # 返回上级目录
103
- cd ..
104
- cd ..
105
- echo "GitHub: 没有检测到数据库变化"
106
  fi
107
- else
108
- echo "当前时间 $(date -d 'Asia/Shanghai' '+%Y-%m-%d %H:%M:%S'),不在同步时间范围内 (8:00-24:00),跳过同步。"
109
  fi
110
 
111
- # 计算到下一个整点的秒数 (北京时间)
112
- seconds_to_wait=$(( (60 - $(date -d "Asia/Shanghai" +%M)) * 60 ))
113
- echo "当前北京时间 $(date -d 'Asia/Shanghai' '+%Y-%m-%d %H:%M:%S')"
114
- echo "等待 ${seconds_to_wait} 秒后进行下一次同步 (到下一个整点)..."
115
- sleep $seconds_to_wait
116
  done
117
  }
118
 
 
26
  echo "GitHub 仓库中未找到 webui.db,将在同步时推送"
27
  fi
28
 
29
+ # 定义同步函数,要求在北京时间每天 08:00~24:00 每逢整点执行同步
30
  sync_data() {
31
  while true; do
32
+ # 计算下一个整点的候选同步时间(按照北京时间 Asia/Shanghai)
33
+ # 先取当前北京时间整点后加 1 小时
34
+ candidate=$(TZ=Asia/Shanghai date -d "$(TZ=Asia/Shanghai date '+%Y-%m-%d %H:00:00') +1 hour" +%s)
35
+ # 获取候选时间对应的“小时”(去掉前导0)
36
+ candidate_hour=$(TZ=Asia/Shanghai date -d "@$candidate" +%H | sed 's/^0*//')
37
+ # 若候选时间处于凌晨 1~7 点(即北京时间 01:00~07:00),则调整为下一天 08:00
38
+ if [ -n "$candidate_hour" ] && [ "$candidate_hour" -ge 1 ] && [ "$candidate_hour" -le 7 ]; then
39
+ candidate=$(TZ=Asia/Shanghai date -d 'tomorrow 08:00:00' +%s)
40
+ fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
+ # 计算等待的秒数
43
+ now=$(date +%s)
44
+ sleep_seconds=$((candidate - now))
45
+ if [ $sleep_seconds -le 0 ]; then
46
+ sleep_seconds=1
47
+ fi
48
+ echo "等待 ${sleep_seconds} 秒到达下一个同步时间(北京时间 $(TZ=Asia/Shanghai date -d "@$candidate" '+%Y-%m-%d %H:%M:%S'))..."
49
+ sleep $sleep_seconds
50
+
51
+ echo "开始同步操作,当前北京时间:$(TZ=Asia/Shanghai date '+%Y-%m-%d %H:%M:%S')"
52
+
53
+ # 1. 同步到 GitHub
54
+ echo "正在开始 GitHub 同步"
55
+ # 进入仓库目录
56
+ cd ./data/github_data || exit 1
57
+ # 配置 Git 用户信息
58
+ git config user.name "AutoSync Bot"
59
+ git config user.email "[email protected]"
60
+
61
+ # 确保在正确的分支
62
+ git checkout main 2>/dev/null || git checkout master
63
+
64
+ # 复制最新的数据库文件
65
+ if [ -f "../webui.db" ]; then
66
+ cp ../webui.db ./webui.db
67
+ else
68
+ echo "数据库尚未初始化"
69
+ fi
70
+
71
+ # 检查是否有变化
72
+ if [[ -n $(git status -s) ]]; then
73
+ # 添加所有变更
74
+ git add webui.db
75
+
76
+ # 提交变更
77
+ git commit -m "Auto sync webui.db $(date '+%Y-%m-%d %H:%M:%S')"
78
+
79
+ # 推送到远程仓库
80
+ git push origin HEAD && {
81
+ echo "GitHub 推送成功"
82
+ }|| {
83
+ echo "推送失败,等待重试..."
84
+ sleep 10
85
+ git push origin HEAD || {
86
+ echo "重试失败,放弃推送到 Github。"
87
+ }
88
+ }
89
+ else
90
+ echo "GitHub: 没有检测到数据库变化"
91
+ fi
92
+
93
+ # 返回上级目录
94
+ cd - > /dev/null
95
+
96
+ # 2. 同步到 WebDAV
97
+ if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
98
+ echo "WebDAV 环境变量缺失,跳过 WebDAV 同步。"
99
+ else
100
+ echo "正在同步到 WebDAV..."
101
+ FILENAME="webui_$(date +'%m_%d').db"
102
+ if [ -f ./data/webui.db ]; then
103
+ curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && {
104
+ echo "WebDAV 上传成功"
105
+ } || {
106
+ echo "WebDAV 上传失败,等待重试..."
107
  sleep 10
108
+ curl -T ./data/webui.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || {
109
+ echo "重试失败,放弃 WebDAV 上传。"
110
  }
111
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  else
113
+ echo "未找到 webui.db 文件,跳过 WebDAV 同步"
 
 
 
114
  fi
 
 
115
  fi
116
 
117
+ echo "同步完成,等待下次同步……"
118
+ # 由于同步结束后循环会重新计算下一次候选同步时间,因此无需统一的间隔设定
 
 
 
119
  done
120
  }
121