lin7zhi commited on
Commit
38a13c1
·
verified ·
1 Parent(s): 69fec20

Upload ai_studio_code.sh

Browse files
Files changed (1) hide show
  1. ai_studio_code.sh +98 -0
ai_studio_code.sh ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # ================= 配置区域 =================
4
+ # 1. WebDAV URL 处理
5
+ WEBDAV_URL=${WEBDAV_URL%/}
6
+ WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH:-""}
7
+ WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH#/}
8
+ WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH%/}
9
+
10
+ if [ -n "$WEBDAV_BACKUP_PATH" ]; then
11
+ FULL_WEBDAV_URL="${WEBDAV_URL}/${WEBDAV_BACKUP_PATH}"
12
+ else
13
+ FULL_WEBDAV_URL="${WEBDAV_URL}"
14
+ fi
15
+
16
+ # 2. 同步间隔 (默认 10 分钟 = 600 秒)
17
+ SYNC_INTERVAL=${SYNC_INTERVAL:-600}
18
+
19
+ # 3. 文件名配置
20
+ BACKUP_NAME="gcli2api_creds.tar.gz"
21
+ TEMP_FILE="/tmp/$BACKUP_NAME"
22
+ TARGET_DIR="creds"
23
+
24
+ # ===========================================
25
+
26
+ log() { echo "[Backup] [$(date '+%H:%M:%S')] $1"; }
27
+
28
+ # 检查环境
29
+ if [[ -z "$WEBDAV_URL" ]]; then
30
+ log "未设置 WEBDAV_URL,跳过备份功能"
31
+ exit 0
32
+ fi
33
+
34
+ # 确保目标目录存在
35
+ mkdir -p "$TARGET_DIR"
36
+
37
+ # === 功能1: 恢复备份 ===
38
+ restore() {
39
+ log "正在检查远程备份..."
40
+ REMOTE_FILE="$FULL_WEBDAV_URL/$BACKUP_NAME"
41
+
42
+ # 下载到临时文件
43
+ HTTP_CODE=$(curl -s -o "$TEMP_FILE" -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$REMOTE_FILE")
44
+
45
+ if [[ "$HTTP_CODE" == "200" ]]; then
46
+ if [ -s "$TEMP_FILE" ]; then
47
+ log "发现备份,正在恢复到 $TARGET_DIR..."
48
+ # 解压覆盖
49
+ tar -xzf "$TEMP_FILE"
50
+ log "✅ 恢复完成"
51
+ else
52
+ log "❌ 下载文件为空,跳过"
53
+ fi
54
+ else
55
+ log "📭 未找到远程备份 (HTTP $HTTP_CODE),使用新环境启动"
56
+ fi
57
+ }
58
+
59
+ # === 功能2: 循环备份 ===
60
+ loop() {
61
+ log "启动定时备份 (间隔: ${SYNC_INTERVAL}秒)"
62
+
63
+ # 尝试创建远程子目录
64
+ if [ -n "$WEBDAV_BACKUP_PATH" ]; then
65
+ curl -s -o /dev/null -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -X MKCOL "$FULL_WEBDAV_URL/"
66
+ fi
67
+
68
+ while true; do
69
+ sleep $SYNC_INTERVAL
70
+
71
+ # 检查 creds 目录是否有文件
72
+ if [ "$(ls -A $TARGET_DIR)" ]; then
73
+ # 打包 creds 目录
74
+ # 排除 config.toml 如果你不想备份它,但通常需要备份
75
+ tar -czf "$TEMP_FILE" "$TARGET_DIR"
76
+
77
+ FILE_SIZE=$(wc -c < "$TEMP_FILE")
78
+ log "正在上传备份 (大小: $FILE_SIZE bytes)..."
79
+
80
+ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -T "$TEMP_FILE" "$FULL_WEBDAV_URL/$BACKUP_NAME")
81
+
82
+ if [[ "$HTTP_CODE" == "201" ]] || [[ "$HTTP_CODE" == "204" ]] || [[ "$HTTP_CODE" == "200" ]]; then
83
+ log "备份成功"
84
+ else
85
+ log "备份失败 (HTTP $HTTP_CODE)"
86
+ fi
87
+ else
88
+ log "⚠️ $TARGET_DIR 目录为空,跳过备份"
89
+ fi
90
+ done
91
+ }
92
+
93
+ # === 入口 ===
94
+ case "$1" in
95
+ "restore") restore ;;
96
+ "loop") loop ;;
97
+ *) restore; loop ;;
98
+ esac