Spaces:
Paused
Paused
File size: 5,842 Bytes
f005856 30b021f f005856 30b021f f005856 96645ff f005856 96645ff f005856 96645ff f005856 96645ff f005856 d203610 f005856 96645ff f005856 96645ff f005856 96645ff f005856 96645ff f005856 96645ff f005856 5f19298 96645ff f005856 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 129 130 |
#!/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 "autosync@bot.com"
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
echo "下次同步: $(date -d "+$SYNC_INTERVAL seconds" '+%Y-%m-%d %H:%M:%S')"
sleep $SYNC_INTERVAL
done
}
# 启动同步进程
sync_data & |