#!/bin/bash #部署的服务器上要安装supervisor进程管理工具 TARGET="third-party-gateway-prod.srv" # 编译后的文件名 REMOTE="root@jg-serv1" # 远程服务器 REMOTE_DIR="/usr/local/third-party-gateway-prod" # 部署目录 SERVICE_NAME="third-party-gateway-prod" # Supervisor 配置里的服务名 WAIT_TIME=2 # 等待服务启动时间(秒) BACKUP_DIR="$REMOTE_DIR/backup" # 旧版本备份目录 # Supervisor 配置目录 #cat /etc/os-release 查看操作系统版本信息 #Debian 安装supervisor #sudo apt update #sudo apt install supervisor -y #systemctl status supervisor SUPERVISOR_CONF_DIR="/etc/supervisor/conf.d" #Ubuntu/Debian 默认路径 #SUPERVISOR_CONF_DIR="/etc/supervisord.d/" #CentOS 7(EPEL)默认路径 trap 'ssh -O exit $REMOTE 2>/dev/null || true' EXIT function remote_cmd() { ssh "$REMOTE" "$@" /dev/null | head -n1") if [ -z "$LATEST_BACKUP" ]; then echo "⚠️ 没有找到备份,无法回滚!" return fi echo "♻️ 回滚到 $LATEST_BACKUP ..." remote_cmd "cp '$LATEST_BACKUP' '$REMOTE_DIR/$TARGET' && chmod +x '$REMOTE_DIR/$TARGET'" echo "🔄 重启服务..." remote_cmd "supervisorctl restart '$SERVICE_NAME'" STATUS=$(remote_cmd "supervisorctl status '$SERVICE_NAME'") echo "$STATUS" if echo "$STATUS" | grep -q "RUNNING"; then echo "✅ 回滚成功,服务已恢复" else echo "❌ 回滚失败,请手动处理" fi } # 8️⃣ 清理本地产物 function clear() { echo "🧹 清理本地编译产物..." rm -f "$TARGET" } # 🔹 主流程 build_local ensure_remote_dir backup_old upload_binary upload_consul_conf #upload_locale_conf upload_supervisor_conf restart_service clear echo "✅ 部署完成!"