- 移除废弃参数: -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -Xloggc - 使用JDK 9+统一日志参数: -Xlog:gc*:file=gc.log:time,uptime,level,tags
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} -Xlog:gc*:file=${LOG_DIR}/gc.log:time,uptime,level,tags"
|
||
|
||
# 创建日志目录
|
||
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
|