#!/bin/bash # ============================================ # 灵越智报 - 服务器端重新部署脚本 # 在服务器上直接运行,用于更新后重启应用 # ============================================ set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # ========== 配置 ========== PROJECT_DIR="/mnt/win_home/lingyue-zhibao" MAVEN_REPO="/mnt/win_home/.m2/repository" LOG_FILE="/var/log/lingyue.log" JAR_NAME="lingyue-starter.jar" JAR_PATH="${PROJECT_DIR}/backend/lingyue-starter/target/${JAR_NAME}" APP_PORT=5232 # JVM 参数 JVM_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError" # =========================== log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # 停止应用 stop_app() { log_info "停止应用..." pkill -f "${JAR_NAME}" 2>/dev/null || true sleep 2 if pgrep -f "${JAR_NAME}" > /dev/null 2>&1; then log_warn "强制终止..." pkill -9 -f "${JAR_NAME}" 2>/dev/null || true sleep 1 fi log_info "应用已停止" } # 编译 build() { log_info "编译项目..." cd ${PROJECT_DIR}/backend rm -rf lingyue-starter/target 2>/dev/null || true mvn clean package -DskipTests -q -Dmaven.repo.local=${MAVEN_REPO} log_info "编译完成" } # 启动应用(前台) start_foreground() { log_info "启动应用(前台模式)..." cd ${PROJECT_DIR}/backend echo "" echo -e "${GREEN}================================================${NC}" echo -e "${GREEN} 灵越智报 2.0${NC}" echo -e "${GREEN} 访问地址: http://localhost:${APP_PORT}${NC}" echo -e "${GREEN} 按 Ctrl+C 停止${NC}" echo -e "${GREEN}================================================${NC}" echo "" java ${JVM_OPTS} -jar ${JAR_PATH} } # 启动应用(后台) start_background() { log_info "启动应用(后台模式)..." cd ${PROJECT_DIR}/backend nohup java ${JVM_OPTS} -jar ${JAR_PATH} > ${LOG_FILE} 2>&1 & sleep 5 if pgrep -f "${JAR_NAME}" > /dev/null 2>&1; then local pid=$(pgrep -f "${JAR_NAME}") log_info "应用启动成功 (PID: $pid)" log_info "访问地址: http://localhost:${APP_PORT}" log_info "日志文件: ${LOG_FILE}" else log_error "启动失败,查看日志: tail -100 ${LOG_FILE}" exit 1 fi } # 查看状态 status() { if pgrep -f "${JAR_NAME}" > /dev/null 2>&1; then local pid=$(pgrep -f "${JAR_NAME}") log_info "应用运行中 (PID: $pid)" log_info "端口: ${APP_PORT}" # 健康检查 local health=$(curl -s http://localhost:${APP_PORT}/actuator/health 2>/dev/null || echo "") if [ -n "$health" ]; then echo "$health" fi else log_warn "应用未运行" fi } # 查看日志 logs() { if [ -f ${LOG_FILE} ]; then tail -${1:-100} ${LOG_FILE} else log_warn "日志文件不存在" fi } # 实时日志 tail_logs() { if [ -f ${LOG_FILE} ]; then tail -f ${LOG_FILE} else log_warn "日志文件不存在" fi } # 显示帮助 show_help() { cat <