start.sh 修订: - 删除 APP_JAR、APP_JAR_PATH 变量 - APP_HOME 从脚本所在目录自动获取 - 删除 spring.profiles.active 参数 - 日志目录从 env.properties 读取(默认 /datacfs/applogs/服务名) - console.log 改为 stdout.log env.properties 修订: - LOG_PATH 改为 /datacfs/applogs/worklog-api service.properties 修订: - 删除未使用的 SPRING_PROFILES_ACTIVE 配置
117 lines
3.6 KiB
Bash
Executable File
117 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# ====================================================
|
||
# 工作日志服务平台 - 应用启动脚本
|
||
# ====================================================
|
||
|
||
# 获取脚本所在目录的上级目录作为应用根目录
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
APP_HOME="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||
|
||
# Classpath 配置(lib 目录下所有 JAR + conf 目录)
|
||
CLASSPATH="${APP_HOME}/lib/*:${APP_HOME}/conf"
|
||
|
||
# 配置文件加载函数
|
||
load_properties() {
|
||
local file=$1
|
||
if [ -f "${file}" ]; then
|
||
echo "加载配置文件: ${file}"
|
||
while IFS='=' read -r key value; do
|
||
# 跳过注释和空行
|
||
[[ ${key} =~ ^#.*$ ]] && continue
|
||
[[ -z ${key} ]] && continue
|
||
# 去除前后空格
|
||
key=$(echo ${key} | xargs)
|
||
value=$(echo ${value} | xargs)
|
||
# 导出环境变量
|
||
if [ -n "${key}" ] && [ -n "${value}" ]; then
|
||
export "${key}=${value}"
|
||
fi
|
||
done < "${file}"
|
||
else
|
||
echo "警告: 配置文件不存在 ${file}"
|
||
fi
|
||
}
|
||
|
||
# 1. 加载统一环境配置
|
||
load_properties "${APP_HOME}/conf/env.properties"
|
||
|
||
# 2. 加载服务个性化配置(覆盖同名参数)
|
||
load_properties "${APP_HOME}/conf/service.properties"
|
||
|
||
# 服务名称(从 service.properties 读取,默认值)
|
||
APP_NAME=${APP_NAME:-worklog-api}
|
||
|
||
# 主启动类(从 service.properties 读取,默认值)
|
||
MAIN_CLASS=${MAIN_CLASS:-com.wjbl.worklog.WorklogApplication}
|
||
|
||
# JVM 配置(从环境变量读取,如果未设置则使用默认值)
|
||
JVM_XMS=${JVM_XMS:-512m}
|
||
JVM_XMX=${JVM_XMX:-1024m}
|
||
JVM_METASPACE_SIZE=${JVM_METASPACE_SIZE:-128m}
|
||
JVM_MAX_METASPACE_SIZE=${JVM_MAX_METASPACE_SIZE:-256m}
|
||
JVM_GC_TYPE=${JVM_GC_TYPE:-G1GC}
|
||
JVM_MAX_GC_PAUSE_MILLIS=${JVM_MAX_GC_PAUSE_MILLIS:-200}
|
||
|
||
# 日志目录(从 env.properties 读取,默认值)
|
||
LOG_DIR=${LOG_PATH:-/datacfs/applogs/${APP_NAME}}
|
||
STDOUT_LOG="${LOG_DIR}/stdout.log"
|
||
PID_FILE="${APP_HOME}/${APP_NAME}.pid"
|
||
|
||
JVM_OPTS="-Xms${JVM_XMS} -Xmx${JVM_XMX} -XX:MetaspaceSize=${JVM_METASPACE_SIZE} -XX:MaxMetaspaceSize=${JVM_MAX_METASPACE_SIZE}"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+Use${JVM_GC_TYPE} -XX:MaxGCPauseMillis=${JVM_MAX_GC_PAUSE_MILLIS}"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_DIR}/heapdump.hprof"
|
||
JVM_OPTS="${JVM_OPTS} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/gc.log"
|
||
|
||
# 创建日志目录
|
||
mkdir -p "${LOG_DIR}"
|
||
|
||
# 检查应用是否已运行
|
||
if [ -f "${PID_FILE}" ]; then
|
||
PID=$(cat "${PID_FILE}")
|
||
if ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "应用已在运行中,PID: ${PID}"
|
||
exit 1
|
||
else
|
||
echo "发现残留 PID 文件,正在清理..."
|
||
rm -f "${PID_FILE}"
|
||
fi
|
||
fi
|
||
|
||
# 检查 lib 目录是否存在
|
||
if [ ! -d "${APP_HOME}/lib" ]; then
|
||
echo "ERROR: 找不到 lib 目录: ${APP_HOME}/lib"
|
||
exit 1
|
||
fi
|
||
|
||
# 启动应用
|
||
echo "========================================="
|
||
echo "启动应用: ${APP_NAME}"
|
||
echo "应用目录: ${APP_HOME}"
|
||
echo "主类: ${MAIN_CLASS}"
|
||
echo "Classpath: ${CLASSPATH}"
|
||
echo "日志目录: ${LOG_DIR}"
|
||
echo "========================================="
|
||
|
||
nohup java ${JVM_OPTS} -cp "${CLASSPATH}" ${MAIN_CLASS} \
|
||
> "${STDOUT_LOG}" 2>&1 &
|
||
|
||
PID=$!
|
||
echo ${PID} > "${PID_FILE}"
|
||
|
||
echo "应用启动中,PID: ${PID}"
|
||
echo "日志文件: ${STDOUT_LOG}"
|
||
|
||
# 等待应用启动
|
||
sleep 5
|
||
|
||
# 检查应用是否启动成功
|
||
if ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "应用启动成功!"
|
||
echo "查看日志: tail -f ${STDOUT_LOG}"
|
||
exit 0
|
||
else
|
||
echo "ERROR: 应用启动失败,请查看日志"
|
||
rm -f "${PID_FILE}"
|
||
exit 1
|
||
fi
|