worklog/scripts/start.sh
zhangjf ba9e2c12c8 fix: 修复JDK 21 GC日志参数兼容性问题
- 移除废弃参数: -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -Xloggc
- 使用JDK 9+统一日志参数: -Xlog:gc*:file=gc.log:time,uptime,level,tags
2026-02-24 19:35:27 +08:00

117 lines
3.6 KiB
Bash
Executable File
Raw Permalink 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="$(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