Spaces:
Running
Running
# 检查必要的环境变量 | |
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then | |
echo "缺少必要的环境变量 WEBDAV_URL、WEBDAV_USERNAME 或 WEBDAV_PASSWORD" | |
exit 1 | |
fi | |
# 创建数据目录 | |
mkdir -p ./data | |
# 获取最新的带日期的数据库文件名 | |
get_latest_dated_file() { | |
curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL" | grep -o 'webui_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{4\}.db' | sort -r | head -n 1 | |
} | |
# 从文件名中提取日期 | |
get_date_from_filename() { | |
local filename=$1 | |
echo "$filename" | grep -o '[0-9]\{2\}_[0-9]\{2\}' | head -n 1 | |
} | |
# 从 WebDAV 下载webui.db文件 | |
echo "正在从 WebDAV 下载数据库文件..." | |
curl -L --fail --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" -o "./data/webui.db" || { | |
echo "下载失败,脚本退出" | |
exit 1 | |
} | |
echo "下载成功" | |
# 定义同步函数 | |
sync_data() { | |
# 首次等待同步间隔 | |
SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒 | |
echo "初始下载完成,等待 ${SYNC_INTERVAL} 秒后开始同步..." | |
sleep $SYNC_INTERVAL | |
# 记录上次上传的日期 | |
LAST_UPLOAD_DATE="" | |
while true; do | |
echo "正在开始同步" | |
# 检查数据库文件是否存在 | |
if [ -f "./data/webui.db" ]; then | |
# 获取当前日期 | |
CURRENT_DATE=$(date +'%m_%d') | |
# 需要上传带日期的文件标志 | |
NEED_DATED_UPLOAD=false | |
# 如果没有记录上次上传日期,从WebDAV获取最新的带日期文件 | |
if [ -z "$LAST_UPLOAD_DATE" ]; then | |
LATEST_FILE=$(get_latest_dated_file) | |
if [ ! -z "$LATEST_FILE" ]; then | |
LAST_UPLOAD_DATE=$(get_date_from_filename "$LATEST_FILE") | |
fi | |
fi | |
# 如果上次上传日期与当前日期不同,需要上传带日期的文件 | |
if [ "$LAST_UPLOAD_DATE" != "$CURRENT_DATE" ]; then | |
NEED_DATED_UPLOAD=true | |
LAST_UPLOAD_DATE=$CURRENT_DATE | |
fi | |
# 如果需要上传带日期的文件 | |
if [ "$NEED_DATED_UPLOAD" = true ]; then | |
FILENAME="webui_${CURRENT_DATE}_$(date +'%H%M').db" | |
echo "上传带日期的文件到 WebDAV..." | |
curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || { | |
echo "带日期文件上传失败" | |
} | |
fi | |
# 始终更新主文件 | |
echo "更新主文件到 WebDAV..." | |
curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" && { | |
echo "WebDAV 更新主文件成功" | |
} || { | |
echo "WebDAV 更新主文件失败,尝试重试..." | |
sleep 10 | |
curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" || { | |
echo "重试失败,放弃上传。" | |
} | |
} | |
else | |
echo "未找到 webui.db 文件,跳过同步" | |
fi | |
# 等待下一次同步间隔 | |
echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')" | |
echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..." | |
sleep $SYNC_INTERVAL | |
done | |
} | |
# 后台启动同步进程 | |
sync_data & |