File size: 3,756 Bytes
aa636f5
 
96645ff
e1243b4
 
96645ff
 
 
1485b47
d2c238c
1485b47
fb1db5d
 
c6aabb6
fb1db5d
 
1485b47
 
fb1db5d
1485b47
 
d2c238c
1485b47
 
 
 
 
d2c238c
 
 
 
 
 
 
96645ff
 
1485b47
 
d2c238c
 
 
1485b47
96645ff
c558e43
3a80330
 
d2c238c
c558e43
ee6464f
c558e43
 
 
3a80330
1485b47
3a80330
1485b47
96645ff
1485b47
c6aabb6
 
fb1db5d
c6aabb6
96645ff
1485b47
 
96645ff
1485b47
 
 
fb1db5d
1485b47
 
 
 
 
3a80330
1485b47
96645ff
1485b47
 
d2c238c
96645ff
e1243b4
1485b47
 
47c9490
96645ff
 
 
 
 
 
 
aa636f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/bash

# 检查必要的环境变量
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
    echo "缺少必要的环境变量 WEBDAV_URL、WEBDAV_USERNAME 或 WEBDAV_PASSWORD"
    exit 1
fi

# 创建数据目录
mkdir -p ./data/webdav

# 确保 WEBDAV_URL 末尾有 /
if [[ ! "$WEBDAV_URL" =~ /$ ]]; then
    WEBDAV_URL="$WEBDAV_URL/"
fi

# 从 WebDAV 拉取最新的备份
echo "正在从 WebDAV 拉取备份..."
LATEST_BACKUP=$(curl -s -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}\.db' | sort -r | head -n 1)

if [ -n "$LATEST_BACKUP" ]; then
    curl -o ./data/webdav/webui.db -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/$LATEST_BACKUP"
    echo "已从 WebDAV 拉取备份: $LATEST_BACKUP"
else
    echo "WebDAV 上未找到备份文件,将创建新的数据库。"
fi

if [ -f ./data/webdav/webui.db ]; then
    cp ./data/webdav/webui.db ./data/webui.db
    echo "从 GitHub 仓库中拉取成功"
else
    echo "GitHub 仓库中未找到 webui.db,将在同步时推送"
fi

sync_data() {
    while true; do
        # 1. 同步到 WebDAV
        echo "正在开始同步..."

        cd ./data/webdav
        
        FILENAME="webui_$(date +'%Y%m%d_%H%M').db"

        # 假设最新的数据库文件在 ./webui.db,将其复制到 ./data/ 目录下并重命名为带时间戳的文件名
        if [ -f ../webui.db ]; then
            cp ../webui.db ./$FILENAME
            echo "已复制最新的数据库文件到 ./data/webdav/$FILENAME"
        else
            echo "未找到 ./data/webui.db 文件,跳过复制步骤"
        fi

        # 检查是否存在要上传的文件 (现在检查带时间戳的文件)
        if [ -f ./$FILENAME ]; then
            # 使用 curl 进行文件上传
            curl -T ./$FILENAME -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/$FILENAME" && {
                echo "WebDAV 上传成功: $FILENAME"

                # 获取 WebDAV 上的所有备份文件
                echo "调试信息: 获取 WebDAV 文件列表"
                curl -v -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/"
                BACKUP_FILES=$(curl -s -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/" | grep -o 'webui_[0-9]\{8\}_[0-9]\{4\}\.db' | sort)
                echo "调试信息: 获取到的文件列表:$BACKUP_FILES"

                # 统计备份文件数量
                NUM_BACKUPS=$(echo "$BACKUP_FILES" | wc -l)

                # 如果备份文件数量超过 20 个,则删除最旧的备份
                if (( NUM_BACKUPS > 20 )); then
                    OLDEST_BACKUP=$(echo "$BACKUP_FILES" | head -n 1)
                    curl -X DELETE -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/$OLDEST_BACKUP"
                    echo "已删除最旧的备份: $OLDEST_BACKUP"
                fi
            } || {
                echo "WebDAV 上传失败,等待重试..."
                sleep 10
                curl -T ./$FILENAME -L --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/openwebui/$FILENAME" || {
                    echo "重试失败,放弃 webdav 上传。"
                }
            }
        else
            echo "未找到 ./data/webdav/$FILENAME 文件,跳过 WebDAV 同步"
        fi

        # 2. 等待统一的时间间隔
        SYNC_INTERVAL=${SYNC_INTERVAL:-7200}  # 默认间隔时间为 7200 秒
        echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
        echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..."
        sleep $SYNC_INTERVAL

    done
}

# 后台启动同步进程
sync_data &