| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- #!/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 <<EOF
- 灵越智报 - 服务器端重新部署脚本
- 用法: ./redeploy.sh [命令]
- 命令:
- (无参数) 重新编译并前台启动
- -d 重新编译并后台启动
- start 仅启动(不编译),前台模式
- start -d 仅启动(不编译),后台模式
- stop 停止应用
- restart 重启应用(不重新编译)
- status 查看状态
- logs [n] 查看最近 n 行日志(默认100)
- tail 实时查看日志
- build 仅编译(不启动)
- help 显示帮助
- 示例:
- ./redeploy.sh # 重新编译并前台启动
- ./redeploy.sh -d # 重新编译并后台启动
- ./redeploy.sh restart # 快速重启
- ./redeploy.sh logs 200 # 查看最近200行日志
- EOF
- }
- # 主函数
- main() {
- case "${1:-}" in
- "")
- stop_app
- build
- start_foreground
- ;;
- -d|--daemon)
- stop_app
- build
- start_background
- ;;
- start)
- stop_app
- if [ "${2:-}" = "-d" ]; then
- start_background
- else
- start_foreground
- fi
- ;;
- stop)
- stop_app
- ;;
- restart)
- stop_app
- if [ "${2:-}" = "-d" ]; then
- start_background
- else
- start_foreground
- fi
- ;;
- status)
- status
- ;;
- logs)
- logs ${2:-100}
- ;;
- tail)
- tail_logs
- ;;
- build)
- build
- ;;
- help|--help|-h)
- show_help
- ;;
- *)
- log_error "未知命令: $1"
- show_help
- exit 1
- ;;
- esac
- }
- main "$@"
|