hzruo commited on
Commit
79d6df8
·
verified ·
1 Parent(s): b7f9252

Delete sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +0 -275
sync_data.sh DELETED
@@ -1,275 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 设置颜色
4
- GREEN='\033[0;32m'
5
- YELLOW='\033[1;33m'
6
- RED='\033[0;31m'
7
- NC='\033[0m' # No Color
8
-
9
- mkdir -p /app/logs
10
- touch /app/logs/app.log
11
- chmod -R 755 /app/logs
12
-
13
- # 使用 TMPDIR 环境变量
14
- TEMP_DIR=${TMPDIR:-"/tmp"}
15
- DB_DOWNLOAD_PATH="${TEMP_DIR}/samba_pool.db.download"
16
- BACKUP_DIR="${TEMP_DIR}/backup"
17
-
18
- # 检查环境变量
19
- if [[ -z "$WEBDAV_URL" ]] || [[ -z "$WEBDAV_USERNAME" ]] || [[ -z "$WEBDAV_PASSWORD" ]]; then
20
- echo -e "${YELLOW}未配置 WebDAV,跳过同步功能${NC}"
21
- echo -e "${YELLOW}如需启用同步,请设置 WEBDAV_URL, WEBDAV_USERNAME, WEBDAV_PASSWORD 环境变量${NC}"
22
- # 直接执行主程序
23
- exec python main.py
24
- exit 0
25
- fi
26
-
27
- # 设置备份路径
28
- WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH:-"sambanova-pool"}
29
- FULL_WEBDAV_URL="${WEBDAV_URL}"
30
- if [ -n "$WEBDAV_BACKUP_PATH" ]; then
31
- FULL_WEBDAV_URL="${WEBDAV_URL}/${WEBDAV_BACKUP_PATH}"
32
- fi
33
-
34
- # 设置同步间隔(默认10分钟)
35
- SYNC_INTERVAL=${SYNC_INTERVAL:-600}
36
-
37
- echo -e "${GREEN}WebDAV 同步已配置:${NC}"
38
- echo -e " URL: ${FULL_WEBDAV_URL}"
39
- echo -e " 同步间隔: ${SYNC_INTERVAL}秒"
40
-
41
- # 检查 WebDAV 连接和权限
42
- check_webdav_connection() {
43
- echo -e "${GREEN}检查 WebDAV 连接和权限...${NC}"
44
-
45
- # 尝试列出根目录
46
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
47
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
48
- -X PROPFIND -H "Depth: 1" \
49
- "${FULL_WEBDAV_URL}/")
50
-
51
- if [ "$HTTP_CODE" = "207" ] || [ "$HTTP_CODE" = "200" ]; then
52
- echo -e "${GREEN}WebDAV 连接成功${NC}"
53
- return 0
54
- elif [ "$HTTP_CODE" = "404" ]; then
55
- echo -e "${YELLOW}WebDAV 路径不存在,尝试创建...${NC}"
56
-
57
- # 尝试创建主目录
58
- create_main_dir
59
- return $?
60
- elif [ "$HTTP_CODE" = "401" ]; then
61
- echo -e "${RED}WebDAV 认证失败,请检查用户名和密码${NC}"
62
- return 1
63
- elif [ "$HTTP_CODE" = "403" ]; then
64
- echo -e "${RED}WebDAV 权限不足,无法访问${NC}"
65
- return 1
66
- else
67
- echo -e "${RED}WebDAV 连接失败: HTTP 状态码 ${HTTP_CODE}${NC}"
68
- return 1
69
- fi
70
- }
71
-
72
- # 创建主目录
73
- create_main_dir() {
74
- # 如果路径包含多级目录,需要逐级创建
75
- IFS='/' read -ra DIRS <<< "$WEBDAV_BACKUP_PATH"
76
- CURRENT_PATH=""
77
-
78
- for DIR in "${DIRS[@]}"; do
79
- if [ -z "$DIR" ]; then
80
- continue
81
- fi
82
-
83
- if [ -z "$CURRENT_PATH" ]; then
84
- CURRENT_PATH="$DIR"
85
- else
86
- CURRENT_PATH="$CURRENT_PATH/$DIR"
87
- fi
88
-
89
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
90
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
91
- -X MKCOL "${WEBDAV_URL}/${CURRENT_PATH}/")
92
-
93
- if [ "$HTTP_CODE" = "201" ]; then
94
- echo -e "${GREEN}创建目录成功: ${CURRENT_PATH}${NC}"
95
- elif [ "$HTTP_CODE" = "405" ]; then
96
- echo -e "${YELLOW}目录已存在: ${CURRENT_PATH}${NC}"
97
- elif [ "$HTTP_CODE" = "409" ]; then
98
- echo -e "${YELLOW}父目录不存在: ${CURRENT_PATH}${NC}"
99
- return 1
100
- elif [ "$HTTP_CODE" = "403" ]; then
101
- echo -e "${RED}无权限创建目录: ${CURRENT_PATH}${NC}"
102
- return 1
103
- else
104
- echo -e "${RED}创建目录失败: ${CURRENT_PATH}, HTTP 状态码 ${HTTP_CODE}${NC}"
105
- return 1
106
- fi
107
- done
108
-
109
- # 创建备份子目录
110
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
111
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
112
- -X MKCOL "${FULL_WEBDAV_URL}/backups/")
113
-
114
- if [ "$HTTP_CODE" = "201" ]; then
115
- echo -e "${GREEN}创建备份目录成功${NC}"
116
- return 0
117
- elif [ "$HTTP_CODE" = "405" ]; then
118
- echo -e "${YELLOW}备份目录已存在${NC}"
119
- return 0
120
- elif [ "$HTTP_CODE" = "403" ]; then
121
- echo -e "${RED}无权限创建备份目录${NC}"
122
- return 1
123
- else
124
- echo -e "${RED}创建备份目录失败: HTTP 状态码 ${HTTP_CODE}${NC}"
125
- return 1
126
- fi
127
- }
128
-
129
- # 从 WebDAV 下载数据库
130
- download_db() {
131
- echo -e "${GREEN}从 WebDAV 下载数据库...${NC}"
132
-
133
- # 使用 curl 下载数据库文件
134
- HTTP_CODE=$(curl -s -o "${DB_DOWNLOAD_PATH}" -w "%{http_code}" \
135
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
136
- "${FULL_WEBDAV_URL}/samba_pool.db")
137
-
138
- if [ "$HTTP_CODE" = "200" ]; then
139
- # 检查文件是否为有效的 SQLite 数据库
140
- if sqlite3 "${DB_DOWNLOAD_PATH}" "PRAGMA integrity_check;" > /dev/null 2>&1; then
141
- echo -e "${GREEN}成功下载数据库文件并验证完整性${NC}"
142
-
143
- # 如果当前没有数据库或下载的数据库更新,则使用下载的数据库
144
- if [ ! -f /app/samba_pool.db ] || [ $(stat -c %Y "${DB_DOWNLOAD_PATH}") -gt $(stat -c %Y /app/samba_pool.db 2>/dev/null || echo 0) ]; then
145
- cp "${DB_DOWNLOAD_PATH}" /app/samba_pool.db
146
- echo -e "${GREEN}已更新本地数据库${NC}"
147
- else
148
- echo -e "${YELLOW}本地数据库已是最新版本${NC}"
149
- rm "${DB_DOWNLOAD_PATH}"
150
- fi
151
- else
152
- echo -e "${RED}下载的文件不是有效的 SQLite 数据库${NC}"
153
- rm "${DB_DOWNLOAD_PATH}"
154
- fi
155
- elif [ "$HTTP_CODE" = "404" ]; then
156
- echo -e "${YELLOW}WebDAV 上不存在数据库文件,将使用本地数据库${NC}"
157
- rm -f "${DB_DOWNLOAD_PATH}"
158
- else
159
- echo -e "${RED}下载数据库失败: HTTP 状态码 ${HTTP_CODE}${NC}"
160
- rm -f "${DB_DOWNLOAD_PATH}"
161
- fi
162
- }
163
-
164
- # 上传数据库到 WebDAV
165
- upload_db() {
166
- echo -e "${GREEN}上传数据库到 WebDAV...${NC}"
167
-
168
- # 确保数据库文件存在
169
- if [ ! -f /app/samba_pool.db ]; then
170
- echo -e "${YELLOW}本地数据库文件不存在,跳过上传${NC}"
171
- return
172
- fi
173
-
174
- # 创建备份目录(如果不存在)
175
- mkdir -p "${BACKUP_DIR}"
176
-
177
- # 创建带时间戳的备份
178
- TIMESTAMP=$(date +%Y%m%d_%H%M%S)
179
- cp /app/samba_pool.db "${BACKUP_DIR}/pool_${TIMESTAMP}.db"
180
-
181
- # 上传当前数据库
182
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
183
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
184
- -T /app/samba_pool.db "${FULL_WEBDAV_URL}/samba_pool.db")
185
-
186
- if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "204" ]; then
187
- echo -e "${GREEN}成功上传数据库${NC}"
188
-
189
- # 上传备份
190
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
191
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
192
- -T "${BACKUP_DIR}/pool_${TIMESTAMP}.db" "${FULL_WEBDAV_URL}/backups/pool_${TIMESTAMP}.db")
193
-
194
- if [ "$HTTP_CODE" = "201" ] || [ "$HTTP_CODE" = "204" ]; then
195
- echo -e "${GREEN}成功上传数据库备份 pool_${TIMESTAMP}.db${NC}"
196
- else
197
- echo -e "${YELLOW}上传数据库备份失败: HTTP 状态码 ${HTTP_CODE}${NC}"
198
- fi
199
- else
200
- echo -e "${RED}上传数据库失败: HTTP 状态码 ${HTTP_CODE}${NC}"
201
- fi
202
-
203
- # 清理临时文件
204
- rm -rf "${BACKUP_DIR}"
205
- }
206
-
207
- # 清理旧备份
208
- cleanup_old_backups() {
209
- echo -e "${GREEN}清理旧备份...${NC}"
210
-
211
- # 使用 curl 列出目录内容
212
- BACKUPS=$(curl -s -X PROPFIND -H "Depth: 1" \
213
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
214
- "${FULL_WEBDAV_URL}/backups/" | grep -o "backups/pool_[0-9]\{8\}_[0-9]\{6\}.db" | sort)
215
-
216
- # 计算要删除的备份数量(保留最新的5个)
217
- BACKUP_COUNT=$(echo "$BACKUPS" | wc -l)
218
- DELETE_COUNT=$((BACKUP_COUNT - 5))
219
-
220
- if [ $DELETE_COUNT -gt 0 ]; then
221
- echo -e "${GREEN}找到 ${BACKUP_COUNT} 个备份,将删除最旧的 ${DELETE_COUNT} 个${NC}"
222
-
223
- # 获取要删除的备份列表
224
- TO_DELETE=$(echo "$BACKUPS" | head -n $DELETE_COUNT)
225
-
226
- # 删除旧备份
227
- for BACKUP in $TO_DELETE; do
228
- HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
229
- -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
230
- -X DELETE "${FULL_WEBDAV_URL}/${BACKUP}")
231
-
232
- if [ "$HTTP_CODE" = "204" ] || [ "$HTTP_CODE" = "200" ]; then
233
- echo -e "${GREEN}已删除旧备份: ${BACKUP}${NC}"
234
- else
235
- echo -e "${YELLOW}删除旧备份失败: ${BACKUP}, HTTP 状态码 ${HTTP_CODE}${NC}"
236
- fi
237
- done
238
- else
239
- echo -e "${GREEN}备份数量不超过5个,无需清理${NC}"
240
- fi
241
- }
242
-
243
- # 同步函数
244
- sync_data() {
245
- while true; do
246
- echo -e "${GREEN}开始同步过程: $(date)${NC}"
247
-
248
- # 检查 WebDAV 连接
249
- if check_webdav_connection; then
250
- # 上传数据库
251
- upload_db
252
-
253
- # 清理旧备份
254
- cleanup_old_backups
255
- else
256
- echo -e "${RED}WebDAV 连接或权限问题,跳过本次同步${NC}"
257
- fi
258
-
259
- echo -e "${GREEN}同步完成,下次同步将在 ${SYNC_INTERVAL} 秒后进行...${NC}"
260
- sleep $SYNC_INTERVAL
261
- done
262
- }
263
-
264
- # 首次启动时检查 WebDAV 连接并下载数据库
265
- if check_webdav_connection; then
266
- download_db
267
- else
268
- echo -e "${YELLOW}WebDAV 连接或权限问题,将使用本地数据库${NC}"
269
- fi
270
-
271
- # 启动同步进程
272
- sync_data &
273
-
274
- # 启动主应用
275
- exec python main.py