zhangjf 3e73b6c086 feat: 脚本支持多租户实例部署
- env.properties新增APP_NAME、INSTANCE_NAME、TENANT_ID配置
- APP_NAME: 服务名称(对应JAR文件名)
- INSTANCE_NAME: 实例名称(区分多租户实例,用于日志目录和PID文件)
- TENANT_ID: 租户标识(用于Nacos元数据路由)
- start.sh传递spring.application.name和TENANT_ID参数
- stop.sh和status.sh同步支持INSTANCE_NAME
2026-02-22 15:46:09 +08:00

86 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 服务启动脚本
# 支持多租户模式:同一服务可部署多个实例(数据库连接不同)
# 获取脚本所在目录
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
APP_HOME=$(dirname "$SCRIPT_DIR")
# 加载环境变量配置优先从env.properties读取
if [ -f "${APP_HOME}/conf/env.properties" ]; then
# 读取APP_NAME和INSTANCE_NAME
while IFS='=' read -r key value; do
# 跳过注释和空行
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
# 去除前后空格
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
# 导出环境变量
export "$key=$value"
done < "${APP_HOME}/conf/env.properties"
fi
# 服务名称对应JAR文件名从env.properties读取或从目录名推断
APP_NAME=${APP_NAME:-$(basename "$APP_HOME")}
# 实例名称用于区分多租户实例默认与APP_NAME相同
INSTANCE_NAME=${INSTANCE_NAME:-${APP_NAME}}
# 日志目录使用INSTANCE_NAME区分不同实例
LOG_HOME="/datacfs/applogs/${INSTANCE_NAME}"
# JAR文件路径使用APP_NAME找JAR
JAR_FILE="${APP_HOME}/lib/${APP_NAME}.jar"
# PID文件路径使用INSTANCE_NAME
PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
# JVM参数可通过环境变量覆盖
JAVA_OPTS="${JAVA_OPTS:--Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200}"
# 日志参数从env.properties读取或使用默认值
LOG_OPTS="-Dlogging.file.path=${LOG_HOME}"
LOG_OPTS="$LOG_OPTS -Dspring.application.name=${APP_NAME}"
LOG_OPTS="$LOG_OPTS -Dlogging.level.root=${LOG_LEVEL_ROOT:-INFO}"
LOG_OPTS="$LOG_OPTS -Dlogging.level.app=${LOG_LEVEL_APP:-DEBUG}"
LOG_OPTS="$LOG_OPTS -Dlogging.pattern.console=${LOG_PATTERN}"
# 多租户参数
TENANT_OPTS=""
if [ -n "${TENANT_ID}" ]; then
TENANT_OPTS="-DTENANT_ID=${TENANT_ID}"
fi
# 配置文件路径
CONFIG_OPTS="--spring.config.location=${APP_HOME}/conf/application.yml"
# 检查是否已运行
if [ -f "$PID_FILE" ]; then
PID=$(cat $PID_FILE)
if ps -p $PID > /dev/null 2>&1; then
echo "${INSTANCE_NAME} is already running (PID: $PID)"
exit 1
fi
fi
# 创建日志目录
mkdir -p ${LOG_HOME}
# 启动服务
echo "Starting ${INSTANCE_NAME}..."
echo " APP_NAME: ${APP_NAME}"
echo " INSTANCE_NAME: ${INSTANCE_NAME}"
echo " APP_HOME: ${APP_HOME}"
echo " LOG_HOME: ${LOG_HOME}"
echo " JAVA_OPTS: ${JAVA_OPTS}"
if [ -n "${TENANT_ID}" ]; then
echo " TENANT_ID: ${TENANT_ID}"
fi
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -jar $JAR_FILE $CONFIG_OPTS > /dev/null 2>&1 &
# 保存PID
echo $! > $PID_FILE
echo "${INSTANCE_NAME} started (PID: $(cat $PID_FILE))"