File size: 5,722 Bytes
4b73cfd
30b021f
4b73cfd
96645ff
2147f7b
 
 
 
 
e203d2f
 
2147f7b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96645ff
2147f7b
96645ff
 
2147f7b
 
 
4b73cfd
2147f7b
 
4b73cfd
2147f7b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e203d2f
2147f7b
 
 
e203d2f
96645ff
2147f7b
96645ff
2147f7b
 
513b3b8
 
96645ff
 
 
2147f7b
96645ff
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash

mkdir -p ./data

# 生成校验和文件
generate_sum() {
    local file=$1
    local sum_file=$2
    sha256sum "$file" > "$sum_file"
}

# 优先从WebDAV恢复数据
if [ ! -z "$WEBDAV_URL" ] && [ ! -z "$WEBDAV_USERNAME" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then
    echo "尝试从WebDAV恢复数据..."
    curl -L --fail --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" -o "./data/webui.db" && {
        echo "从WebDAV恢复数据成功"
    } || {
        if [ ! -z "$G_NAME" ] && [ ! -z "$G_TOKEN" ]; then
            echo "从WebDAV恢复失败,尝试从GitHub恢复..."
            REPO_URL="https://${G_TOKEN}@github.com/${G_NAME}.git"
            git clone "$REPO_URL" ./data/temp && {
                if [ -f ./data/temp/webui.db ]; then
                    mv ./data/temp/webui.db ./data/webui.db
                    echo "从GitHub仓库恢复成功"
                    rm -rf ./data/temp
                else
                    echo "GitHub仓库中未找到webui.db"
                    rm -rf ./data/temp
                fi
            }
        else
            echo "WebDAV恢复失败,且未配置GitHub"
        fi
    }
else
    echo "未配置WebDAV,跳过数据恢复"
fi

# 同步函数
sync_data() {
    while true; do
        echo "开始同步..."
        HOUR=$(date +%H)
        
        if [ -f "./data/webui.db" ]; then
            # 生成新的校验和文件
            generate_sum "./data/webui.db" "./data/webui.db.sha256.new"
            
            # 检查文件是否变化
            if [ ! -f "./data/webui.db.sha256" ] || ! cmp -s "./data/webui.db.sha256.new" "./data/webui.db.sha256"; then
                echo "检测到文件变化,开始同步..."
                mv "./data/webui.db.sha256.new" "./data/webui.db.sha256"
                
                # 同步到WebDAV
                if [ ! -z "$WEBDAV_URL" ] && [ ! -z "$WEBDAV_USERNAME" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then
                    echo "同步到WebDAV..."
                    
                    # 上传数据文件
                    curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" && {
                        echo "WebDAV更新成功"
                        
                        # 每日备份(包括WebDAV和GitHub),在每天0点进行
                        if [ "$HOUR" = "00" ]; then
                            echo "开始每日备份..."
                            
                            # 获取前一天的日期
                            YESTERDAY=$(date -d "yesterday" '+%Y%m%d')
                            FILENAME_DAILY="webui_${YESTERDAY}.db"
                            
                            # WebDAV每日备份
                            curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME_DAILY" && {
                                echo "WebDAV日期备份成功: $FILENAME_DAILY"
                                
                                # GitHub每日备份
                                if [ ! -z "$G_NAME" ] && [ ! -z "$G_TOKEN" ]; then
                                    echo "开始GitHub每日备份..."
                                    REPO_URL="https://${G_TOKEN}@github.com/${G_NAME}.git"
                                    git clone "$REPO_URL" ./data/temp || {
                                        echo "GitHub克隆失败"
                                        rm -rf ./data/temp
                                    }
                                    
                                    if [ -d "./data/temp" ]; then
                                        cd ./data/temp
                                        git config user.name "AutoSync Bot"
                                        git config user.email "[email protected]"
                                        git checkout main || git checkout master
                                        cp ../webui.db ./webui.db
                                        
                                        if [[ -n $(git status -s) ]]; then
                                            git add webui.db
                                            git commit -m "Auto sync webui.db for ${YESTERDAY}"
                                            git push origin HEAD && {
                                                echo "GitHub推送成功"
                                            } || echo "GitHub推送失败"
                                        else
                                            echo "GitHub: 无数据变化"
                                        fi
                                        cd ../..
                                        rm -rf ./data/temp
                                    fi
                                fi
                            } || echo "WebDAV日期备份失败"
                        fi
                    } || {
                        echo "WebDAV上传失败,重试..."
                        sleep 10
                        curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" || {
                            echo "WebDAV重试失败"
                        }
                    }
                fi
            else
                echo "文件未发生变化,跳过同步"
                rm -f "./data/webui.db.sha256.new"
            fi
        else
            echo "未找到webui.db,跳过同步"
        fi
        
        echo "当前时间: $(date '+%Y-%m-%d %H:%M:%S')"
        echo "下次同步: $(date -d '+5 minutes' '+%Y-%m-%d %H:%M:%S')"
        sleep 300
    done
}

# 启动同步进程
sync_data &