From 117949d9322979f9c69c5e2fa7eddc7f0b05720d Mon Sep 17 00:00:00 2001 From: vet Date: Mon, 20 Apr 2026 23:40:03 +0700 Subject: [PATCH] test --- 07-start-frontend.sh | 50 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/07-start-frontend.sh b/07-start-frontend.sh index 3c26e9c..129fef5 100755 --- a/07-start-frontend.sh +++ b/07-start-frontend.sh @@ -61,9 +61,9 @@ declare -A FE_CMD=( [pc]="yarn dev:web" [meetingh5]="npm run dev" [h5]="npm run dev" - [cms]="pnpm run dev" - [build-cms]="pnpm run dev" - [build-down]="npm run dev" + [cms]="pnpm run dev -- --port 8001" + [build-cms]="pnpm run dev -- --port 8002" + [build-down]="npm run dev -- --port 8003" ) # cms/build-cms/build-down 不配置端口时默认都是 8000,需手动指定 @@ -72,8 +72,8 @@ declare -A FE_ENV=( [meetingh5]="" [h5]="" [cms]="HOST=0.0.0.0 PORT=8001" - [build-cms]="PORT=8002" - [build-down]="PORT=8003" + [build-cms]="HOST=0.0.0.0 PORT=8002" + [build-down]="HOST=0.0.0.0 PORT=8003" ) declare -A FE_PORT=( @@ -119,6 +119,34 @@ _check_fe_port_free() { fi } +_wait_fe_port_listen() { + local name="$1" + local port="${FE_PORT_NUM[$name]}" + local i + + for i in {1..10}; do + if lsof -tiTCP:"$port" -sTCP:LISTEN &>/dev/null; then + return 0 + fi + sleep 1 + done + + error "$name 启动后未监听预期端口 $port" + return 1 +} + +_kill_tree() { + local pid="$1" signal="${2:-TERM}" + local children child + + children=$(pgrep -P "$pid" 2>/dev/null || true) + for child in $children; do + _kill_tree "$child" "$signal" + done + + kill "-$signal" "$pid" 2>/dev/null || true +} + # ── 启动单个前端服务 ────────────────────────────────────────────────────────── _start_fe() { local name="$1" @@ -193,6 +221,18 @@ _start_fe() { sleep 2 if [[ -f "$pidfile" ]] && kill -0 "$(cat "$pidfile")" 2>/dev/null; then + if ! _wait_fe_port_listen "$name"; then + local started_pid + started_pid="$(cat "$pidfile")" + warn "$name 未监听预期端口 $port,清理本次启动进程 (PID=$started_pid)" + _kill_tree "$started_pid" TERM + sleep 1 + if kill -0 "$started_pid" 2>/dev/null; then + _kill_tree "$started_pid" KILL + fi + rm -f "$pidfile" + return 1 + fi success " ✓ $name (端口=$port, PID=$(cat "$pidfile")) ${FE_PORT[$name]} → $logfile" if [[ "$name" == "pc" ]]; then pc_check_wasm_assets "${PC_BACKEND_ORIGIN}"