| #!/bin/bash |
|
|
| set -euo pipefail |
|
|
| |
| if [[ -z "${WEBDAV_URL}" || -z "${WEBDAV_USER}" || -z "${WEBDAV_PASS}" ]]; then |
| echo "错误:必须设置WEBDAV_URL、WEBDAV_USER、WEBDAV_PASS环境变量" |
| exit 1 |
| fi |
|
|
| |
| echo "正在获取最新版本信息..." |
| redirect_url=$(curl -Ls -o /dev/null -w '%{url_effective}' 'https://github.com/hectorqin/reader/releases/latest') |
|
|
| |
| tag=$(basename "$redirect_url") |
| if [[ ! "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| echo "错误:无效的版本标签 '$tag'" |
| exit 1 |
| fi |
| version="${tag#v}" |
| echo "检测到最新版本: $version" |
|
|
| |
| download_url="https://github.com/hectorqin/reader/releases/download/${tag}/reader-server-${version}.zip" |
| echo "开始下载: $download_url" |
|
|
| |
| if ! curl -LO "$download_url"; then |
| echo "错误:文件下载失败" |
| exit 1 |
| fi |
|
|
| |
| zip_file="reader-server-${version}.zip" |
| echo "正在解压文件..." |
| unzip "$zip_file" |
|
|
| |
| find . -type f -exec chmod +x {} + |
|
|
| |
| dir_name=$(unzip -Z -1 "$zip_file" | head -n1 | cut -d '/' -f1) |
| if [ -n "$dir_name" ]; then |
| echo "进入解压目录: $dir_name" |
| cd "$dir_name" |
| fi |
|
|
| |
| DATA_DIR="../storage" |
| if [ ! -d "${DATA_DIR}" ] || [ -z "$(ls -A ${DATA_DIR})" ]; then |
| echo "数据目录不存在或为空,尝试从WebDAV恢复备份..." |
| if curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" "${WEBDAV_URL}/latest-backup.tar.gz" -o /tmp/latest-backup.tar.gz; then |
| echo "下载备份成功,正在解压..." |
| mkdir -p "${DATA_DIR}" |
| tar -xzf /tmp/latest-backup.tar.gz -C "${DATA_DIR}" 2>/dev/null || true |
| echo "数据恢复完成" |
| else |
| echo "警告:无法下载备份文件,将使用空数据目录启动" |
| fi |
| else |
| echo "数据目录已存在,跳过恢复" |
| fi |
|
|
| |
| echo "启动定时备份任务,每半小时备份一次到WebDAV..." |
| ( |
| while true; do |
| sleep 1800 |
| echo "$(date '+%Y-%m-%d %T'): 开始备份数据..." |
| BACKUP_FILE="/tmp/backup-$(date +%Y%m%d%H%M%S).tar.gz" |
| tar -czf "${BACKUP_FILE}" -C "${DATA_DIR}" . >/dev/null 2>&1 |
| curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" -T "${BACKUP_FILE}" "${WEBDAV_URL}/backup/$(basename "${BACKUP_FILE}")" --silent |
| curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" -T "${BACKUP_FILE}" "${WEBDAV_URL}/latest-backup.tar.gz" --silent |
| rm -f "${BACKUP_FILE}" |
| echo "$(date '+%Y-%m-%d %T'): 备份完成" |
| done |
| ) & |
|
|
| |
| if [ -f "./startup.sh" ]; then |
| echo "正在启动服务..." |
| chmod +x "./startup.sh" |
| ./startup.sh -m single |
| echo "服务已启动!" |
| tail -f /app/logs/start.out |
| else |
| echo "错误:启动脚本不存在" |
| exit 1 |
| fi |