lin7zhi commited on
Commit
6ef16db
·
verified ·
1 Parent(s): c3ed912

Upload ai_studio_code 4.sh

Browse files
Files changed (1) hide show
  1. ai_studio_code 4.sh +108 -0
ai_studio_code 4.sh ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # === 配置 ===
4
+ WEBDAV_URL=${WEBDAV_URL%/}
5
+ FULL_WEBDAV_URL="${WEBDAV_URL}"
6
+ TEMP_DIR="/tmp/backup_temp"
7
+ # 我们要备份的目标文件名
8
+ TARGET_FILENAME="accounts.json"
9
+ # 远程保存的名字
10
+ REMOTE_FILENAME="antigravity_accounts.json"
11
+
12
+ # 日志函数
13
+ log() { echo "[Backup] [$(date '+%H:%M:%S')] $1"; }
14
+
15
+ # === 核心函数:寻找文件位置 ===
16
+ find_target_path() {
17
+ # 1. 先猜它在 data 目录下 (最常见的情况)
18
+ if [ -f "/app/data/$TARGET_FILENAME" ]; then
19
+ FOUND_PATH="/app/data/$TARGET_FILENAME"
20
+ # 2. 再猜它在根目录下
21
+ elif [ -f "/app/$TARGET_FILENAME" ]; then
22
+ FOUND_PATH="/app/$TARGET_FILENAME"
23
+ # 3. 实在找不到,用 find 命令全盘搜 (排除 node_modules)
24
+ else
25
+ FOUND_PATH=$(find /app -name "$TARGET_FILENAME" -type f -not -path "*/node_modules/*" | head -n 1)
26
+ fi
27
+
28
+ echo "$FOUND_PATH"
29
+ }
30
+
31
+ # === 检查环境变量 ===
32
+ if [[ -z "$WEBDAV_URL" ]]; then
33
+ log "未设置 WEBDAV_URL,跳过备份功能"
34
+ exit 0
35
+ fi
36
+
37
+ # 安装 curl
38
+ if ! command -v curl &> /dev/null; then
39
+ apk add --no-cache curl || apt-get update && apt-get install -y curl
40
+ fi
41
+
42
+ # === 1. 恢复备份 ===
43
+ download_backup() {
44
+ log "正在检查远程备份..."
45
+ REMOTE_FILE="$FULL_WEBDAV_URL/$REMOTE_FILENAME"
46
+
47
+ # 默认恢复路径 (如果还没生成,我们先恢复到 data 目录,因为 Dockerfile 里创建了这个目录)
48
+ RESTORE_DIR="/app/data"
49
+ mkdir -p "$RESTORE_DIR"
50
+ RESTORE_PATH="$RESTORE_DIR/$TARGET_FILENAME"
51
+
52
+ HTTP_CODE=$(curl -s -o "$TEMP_DIR/restored.json" -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$REMOTE_FILE")
53
+
54
+ if [[ "$HTTP_CODE" == "200" ]]; then
55
+ log "发现远程备份,正在恢复到 $RESTORE_PATH"
56
+ mv "$TEMP_DIR/restored.json" "$RESTORE_PATH"
57
+
58
+ # 为了保险,也在根目录放一份
59
+ cp "$RESTORE_PATH" "/app/$TARGET_FILENAME"
60
+ else
61
+ log "未找到远程备份 (HTTP $HTTP_CODE),跳过恢复"
62
+ fi
63
+ }
64
+
65
+ # === 2. 循环备份 ===
66
+ loop_sync() {
67
+ mkdir -p $TEMP_DIR
68
+
69
+ while true; do
70
+ # 每 30 秒检查一次,反应快一点
71
+ sleep 30
72
+
73
+ # 动态寻找文件位置
74
+ CURRENT_FILE_PATH=$(find_target_path)
75
+
76
+ if [ -n "$CURRENT_FILE_PATH" ]; then
77
+ # 检查文件大小,忽略空文件
78
+ FILE_SIZE=$(wc -c < "$CURRENT_FILE_PATH")
79
+ if [ "$FILE_SIZE" -lt 5 ]; then
80
+ # log "文件存在但为空,跳过..."
81
+ continue
82
+ fi
83
+
84
+ log "找到文件: $CURRENT_FILE_PATH (大小: $FILE_SIZE)"
85
+
86
+ # 开始上传
87
+ REMOTE_FILE="$FULL_WEBDAV_URL/$REMOTE_FILENAME"
88
+ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -T "$CURRENT_FILE_PATH" "$REMOTE_FILE")
89
+
90
+ if [[ "$HTTP_CODE" == "201" ]] || [[ "$HTTP_CODE" == "204" ]] || [[ "$HTTP_CODE" == "200" ]]; then
91
+ log "备份成功!"
92
+ else
93
+ log "备份失败 (HTTP $HTTP_CODE)"
94
+ fi
95
+
96
+ else
97
+ log "⚠️ 找不到 $TARGET_FILENAME"
98
+ log "--- 调试信息:当前 /app 目录下的文件结构 ---"
99
+ # 列出所有 JSON 文件,帮你看看到底生成在哪了
100
+ find /app -maxdepth 3 -name "*.json" -not -path "*/node_modules/*"
101
+ log "----------------------------------------"
102
+ fi
103
+ done
104
+ }
105
+
106
+ # === 主流程 ===
107
+ download_backup
108
+ loop_sync