web / sync_data.sh
MadisonWirtanen's picture
Update sync_data.sh
e203d2f verified
raw
history blame
3.48 kB
#!/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
# 获取最新的带日期的数据库文件名
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 &