#!/bin/bash # 3588AdminBackend 升级脚本 set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" INSTALL_DIR="${1:-/opt/3588admin}" BACKUP_DIR="/root/3588admin-backup-$(date +%Y%m%d%H%M%S)" echo "========== 3588AdminBackend 升级 ==========" echo "安装目录: $INSTALL_DIR" echo "备份目录: $BACKUP_DIR" echo "" # 检查 root 权限 if [ "$EUID" -ne 0 ]; then echo "错误: 请使用 sudo 运行升级脚本" exit 1 fi # 检查安装目录是否存在 if [ ! -d "$INSTALL_DIR" ]; then echo "错误: 安装目录不存在: $INSTALL_DIR" echo "请先运行 install.sh 进行首次安装" exit 1 fi # 确认 read -p "确定要升级 3588AdminBackend? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "升级已取消" exit 0 fi # 1. 停止服务 echo "[1/5] 停止服务..." if [ -f "$INSTALL_DIR/scripts/stop.sh" ]; then "$INSTALL_DIR/scripts/stop.sh" 2>/dev/null || true elif systemctl is-active --quiet 3588admin 2>/dev/null; then systemctl stop 3588admin fi sleep 2 # 2. 备份 echo "[2/5] 备份现有数据..." mkdir -p "$BACKUP_DIR" # 备份配置 if [ -f "$INSTALL_DIR/config/managerd.json" ]; then cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_DIR/" echo " 已备份配置文件" fi # 备份日志 if [ -d "$INSTALL_DIR/logs" ]; then cp -r "$INSTALL_DIR/logs" "$BACKUP_DIR/" echo " 已备份日志文件" fi # 备份旧版本二进制 if [ -f "$INSTALL_DIR/bin/managerd" ]; then cp "$INSTALL_DIR/bin/managerd" "$BACKUP_DIR/managerd.old" echo " 已备份旧版本二进制" fi echo " 备份完成: $BACKUP_DIR" # 3. 更新二进制文件 echo "[3/5] 更新二进制文件..." if [ -f "$SCRIPT_DIR/../bin/managerd" ]; then cp "$SCRIPT_DIR/../bin/managerd" "$INSTALL_DIR/bin/managerd" chmod +x "$INSTALL_DIR/bin/managerd" echo " 已更新二进制文件" else echo "警告: 未找到新的二进制文件,跳过更新" fi # 4. 更新脚本 echo "[4/5] 更新脚本..." if [ -d "$SCRIPT_DIR" ]; then cp "$SCRIPT_DIR/"*.sh "$INSTALL_DIR/scripts/" 2>/dev/null || true chmod +x "$INSTALL_DIR/scripts/"*.sh echo " 已更新脚本文件" fi # 5. 启动服务 echo "[5/5] 启动服务..." if [ -f "$INSTALL_DIR/scripts/start.sh" ]; then "$INSTALL_DIR/scripts/start.sh" else systemctl start 3588admin fi echo "" echo "========== 升级完成 ==========" echo "服务已启动" echo "" echo "备份位置: $BACKUP_DIR" echo "" echo "如升级后出现问题,可快速回滚:" echo " sudo systemctl stop 3588admin" echo " sudo cp $BACKUP_DIR/managerd.old $INSTALL_DIR/bin/managerd" echo " sudo systemctl start 3588admin"