CoolFace
Apppublic

Baphes/OGPT-Turbo

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
sync_data.sh128 linesDownload Raw Back to root
1#!/bin/bash2 3mkdir -p ./data4 5# 生成校验和文件6generate_sum() {7    local file=$18    local sum_file=$29    sha256sum "$file" > "$sum_file"10}11 12# 优先从WebDAV恢复数据13if [ ! -z "$WEBDAV_URL" ] && [ ! -z "$WEBDAV_USERNAME" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then14    echo "尝试从WebDAV恢复数据..."15    curl -L --fail --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" -o "./data/webui.db" && {16        echo "从WebDAV恢复数据成功"17    } || {18        if [ ! -z "$G_NAME" ] && [ ! -z "$G_TOKEN" ]; then19            echo "从WebDAV恢复失败,尝试从GitHub恢复..."20            REPO_URL="https://${G_TOKEN}@github.com/${G_NAME}.git"21            git clone "$REPO_URL" ./data/temp && {22                if [ -f ./data/temp/webui.db ]; then23                    mv ./data/temp/webui.db ./data/webui.db24                    echo "从GitHub仓库恢复成功"25                    rm -rf ./data/temp26                else27                    echo "GitHub仓库中未找到webui.db"28                    rm -rf ./data/temp29                fi30            }31        else32            echo "WebDAV恢复失败,且未配置GitHub"33        fi34    }35else36    echo "未配置WebDAV,跳过数据恢复"37fi38 39# 同步函数40sync_data() {41    while true; do42        echo "开始同步..."43        HOUR=$(date +%H)44        45        if [ -f "./data/webui.db" ]; then46            # 生成新的校验和文件47            generate_sum "./data/webui.db" "./data/webui.db.sha256.new"48            49            # 检查文件是否变化50            if [ ! -f "./data/webui.db.sha256" ] || ! cmp -s "./data/webui.db.sha256.new" "./data/webui.db.sha256"; then51                echo "检测到文件变化,开始同步..."52                mv "./data/webui.db.sha256.new" "./data/webui.db.sha256"53                54                # 同步到WebDAV55                if [ ! -z "$WEBDAV_URL" ] && [ ! -z "$WEBDAV_USERNAME" ] && [ ! -z "$WEBDAV_PASSWORD" ]; then56                    echo "同步到WebDAV..."57                    58                    # 上传数据文件59                    curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" && {60                        echo "WebDAV更新成功"61                        62                        # 每日备份(包括WebDAV和GitHub),在每天0点进行63                        if [ "$HOUR" = "00" ]; then64                            echo "开始每日备份..."65                            66                            # 获取前一天的日期67                            YESTERDAY=$(date -d "yesterday" '+%Y%m%d')68                            FILENAME_DAILY="webui_${YESTERDAY}.db"69                            70                            # WebDAV每日备份71                            curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME_DAILY" && {72                                echo "WebDAV日期备份成功: $FILENAME_DAILY"73                                74                                # GitHub每日备份75                                if [ ! -z "$G_NAME" ] && [ ! -z "$G_TOKEN" ]; then76                                    echo "开始GitHub每日备份..."77                                    REPO_URL="https://${G_TOKEN}@github.com/${G_NAME}.git"78                                    git clone "$REPO_URL" ./data/temp || {79                                        echo "GitHub克隆失败"80                                        rm -rf ./data/temp81                                    }82                                    83                                    if [ -d "./data/temp" ]; then84                                        cd ./data/temp85                                        git config user.name "AutoSync Bot"86                                        git config user.email "autosync@bot.com"87                                        git checkout main || git checkout master88                                        cp ../webui.db ./webui.db89                                        90                                        if [[ -n $(git status -s) ]]; then91                                            git add webui.db92                                            git commit -m "Auto sync webui.db for ${YESTERDAY}"93                                            git push origin HEAD && {94                                                echo "GitHub推送成功"95                                            } || echo "GitHub推送失败"96                                        else97                                            echo "GitHub: 无数据变化"98                                        fi99                                        cd ../..100                                        rm -rf ./data/temp101                                    fi102                                fi103                            } || echo "WebDAV日期备份失败"104                        fi105                    } || {106                        echo "WebDAV上传失败,重试..."107                        sleep 10108                        curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" || {109                            echo "WebDAV重试失败"110                        }111                    }112                fi113            else114                echo "文件未发生变化,跳过同步"115                rm -f "./data/webui.db.sha256.new"116            fi117        else118            echo "未找到webui.db,跳过同步"119        fi120        121        echo "当前时间: $(date '+%Y-%m-%d %H:%M:%S')"122        echo "下次同步: $(date -d '+5 minutes' '+%Y-%m-%d %H:%M:%S')"123        sleep 300124    done125}126 127# 启动同步进程128sync_data &