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
}
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() {
local pid second
local -a pids=()
@@ -219,7 +226,7 @@ build_app() {
}
start_app() {
local pid second
local pid second log_tail_pid
local -a jvm_options=()
read -r -a jvm_options <<< "$JVM_MEMORY $JVM_DEBUG"
@@ -235,8 +242,16 @@ start_app() {
)
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
if ! pid_is_running "$pid"; then
stop_log_tail "$log_tail_pid"
trap - INT TERM
__red "应用启动失败,进程已退出。最近日志:"
tail -n 80 "$LOG_FILE" >&2 || true
rm -f "$PID_FILE"
@@ -244,12 +259,16 @@ start_app() {
fi
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"
return 0
fi
sleep 1
done
stop_log_tail "$log_tail_pid"
trap - INT TERM
__red "应用进程仍在运行,但健康检查超时(${STARTUP_TIMEOUT}s: $HEALTH_URL"
__red "最近日志:"
tail -n 80 "$LOG_FILE" >&2 || true