#!/bin/bash # 服务停止脚本 # 支持多租户模式 # 获取脚本所在目录 SCRIPT_DIR=$(dirname "$(readlink -f "$0")") APP_HOME=$(dirname "$SCRIPT_DIR") # 自动从lib目录下的JAR文件推断APP_NAME JAR_FILE=$(ls ${APP_HOME}/lib/*.jar 2>/dev/null | head -1) APP_NAME=$(basename "$JAR_FILE" .jar) # 加载环境变量配置 if [ -f "${APP_HOME}/conf/env.properties" ]; then while IFS='=' read -r key value; do [[ "$key" =~ ^#.*$ ]] && continue [[ -z "$key" ]] && continue key=$(echo "$key" | xargs) value=$(echo "$value" | xargs) [[ "$key" == "APP_NAME" ]] && continue export "$key=$value" done < "${APP_HOME}/conf/env.properties" fi # 实例名称 INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}} # PID文件路径 PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid" # 检查是否运行 if [ ! -f "$PID_FILE" ]; then echo "${INSTANCE_NAME} is not running" exit 0 fi PID=$(cat $PID_FILE) if ! ps -p $PID > /dev/null 2>&1; then echo "${INSTANCE_NAME} is not running" rm -f $PID_FILE exit 0 fi # 停止服务 echo "Stopping ${INSTANCE_NAME} (PID: $PID)..." kill $PID # 等待停止 for i in {1..30}; do if ! ps -p $PID > /dev/null 2>&1; then break fi sleep 1 done # 强制停止 if ps -p $PID > /dev/null 2>&1; then echo "Force killing ${INSTANCE_NAME}..." kill -9 $PID fi rm -f $PID_FILE echo "${INSTANCE_NAME} stopped"