- APP_NAME不再写在env.properties,而是从lib/*.jar自动推断 - env.properties只保留INSTANCE_NAME和TENANT_ID(多租户场景使用) - 所有脚本(start.sh/stop.sh/status.sh)统一从JAR文件获取APP_NAME - 避免打包后所有服务的env.properties都一样导致APP_NAME冲突
64 lines
1.4 KiB
Bash
Executable File
64 lines
1.4 KiB
Bash
Executable File
#!/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"
|