#!/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))"