worklog/scripts/start.sh
zhangjf c2a12a3625 refactor: 优化启动脚本配置
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 配置
2026-02-24 18:56:29 +08:00

117 lines
3.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="$(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