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 &
|