This commit is contained in:
2026-07-15 15:17:50 +08:00
parent ba5b36b346
commit 73e961facf

View File

@@ -158,6 +158,13 @@ pid_is_running() {
[[ "$pid" =~ ^[0-9]+$ ]] && kill -0 "$pid" 2>/dev/null [[ "$pid" =~ ^[0-9]+$ ]] && kill -0 "$pid" 2>/dev/null
} }
stop_log_tail() {
local tail_pid="${1:-}"
[[ "$tail_pid" =~ ^[0-9]+$ ]] || return 0
kill "$tail_pid" 2>/dev/null || true
wait "$tail_pid" 2>/dev/null || true
}
stop_app() { stop_app() {
local pid second local pid second
local -a pids=() local -a pids=()
@@ -219,7 +226,7 @@ build_app() {
} }
start_app() { start_app() {
local pid second local pid second log_tail_pid
local -a jvm_options=() local -a jvm_options=()
read -r -a jvm_options <<< "$JVM_MEMORY $JVM_DEBUG" read -r -a jvm_options <<< "$JVM_MEMORY $JVM_DEBUG"
@@ -235,8 +242,16 @@ start_app() {
) )
pid="$(<"$PID_FILE")" pid="$(<"$PID_FILE")"
# 启动阶段也实时输出新增日志,避免健康检查等待期间看起来像脚本卡住。
tail -n 0 -F "$LOG_FILE" &
log_tail_pid="$!"
trap 'stop_log_tail "$log_tail_pid"; exit 130' INT TERM
__green "实时启动日志(健康检查通过后继续跟踪)"
for second in $(seq 1 "$STARTUP_TIMEOUT"); do for second in $(seq 1 "$STARTUP_TIMEOUT"); do
if ! pid_is_running "$pid"; then if ! pid_is_running "$pid"; then
stop_log_tail "$log_tail_pid"
trap - INT TERM
__red "应用启动失败,进程已退出。最近日志:" __red "应用启动失败,进程已退出。最近日志:"
tail -n 80 "$LOG_FILE" >&2 || true tail -n 80 "$LOG_FILE" >&2 || true
rm -f "$PID_FILE" rm -f "$PID_FILE"
@@ -244,12 +259,16 @@ start_app() {
fi fi
if command -v curl >/dev/null 2>&1 && curl -fsS --max-time 2 "$HEALTH_URL" >/dev/null 2>&1; then if command -v curl >/dev/null 2>&1 && curl -fsS --max-time 2 "$HEALTH_URL" >/dev/null 2>&1; then
stop_log_tail "$log_tail_pid"
trap - INT TERM
__green "应用启动成功: PID=$pid,健康检查通过($HEALTH_URL" __green "应用启动成功: PID=$pid,健康检查通过($HEALTH_URL"
return 0 return 0
fi fi
sleep 1 sleep 1
done done
stop_log_tail "$log_tail_pid"
trap - INT TERM
__red "应用进程仍在运行,但健康检查超时(${STARTUP_TIMEOUT}s: $HEALTH_URL" __red "应用进程仍在运行,但健康检查超时(${STARTUP_TIMEOUT}s: $HEALTH_URL"
__red "最近日志:" __red "最近日志:"
tail -n 80 "$LOG_FILE" >&2 || true tail -n 80 "$LOG_FILE" >&2 || true