Baphes/OGPT-Turbo
0
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 &