diff --git a/start-all.sh b/start-all.sh new file mode 100755 index 0000000..f186435 --- /dev/null +++ b/start-all.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BACKEND_DIR="$ROOT_DIR/lotterLaravel" +API_URL="http://127.0.0.1:8000" +VITE_URL="http://localhost:5173" +REVERB_URL="ws://127.0.0.1:8080" +BACKEND_PORTS=(8000 8080 5173 5174) + +# 只清理后端相关端口,避免影响手动启动的两个前端 +stop_backend_listeners() { + local signal=$1 + for port in "${BACKEND_PORTS[@]}"; do + local pids + pids=$(lsof -nP -iTCP:"$port" -sTCP:LISTEN -t 2>/dev/null || true) + if [[ -n "$pids" ]]; then + echo "Stopping backend port $port (PIDs: $pids)" + # shellcheck disable=SC2086 + kill $signal $pids 2>/dev/null || true + fi + done +} + +stop_backend_listeners TERM +sleep 1 +stop_backend_listeners -9 + +pids=() +cleanup() { + trap - INT TERM EXIT + if ((${#pids[@]})); then + kill "${pids[@]}" 2>/dev/null || true + fi +} +trap cleanup INT TERM EXIT + +echo "Starting backend local stack..." +echo " - Laravel API : $API_URL" +echo " - Vite assets : $VITE_URL" +echo " - Reverb WS : $REVERB_URL" +echo + +echo "Starting backend (Laravel + queue + reverb + schedule + vite) …" +( + cd "$BACKEND_DIR" + composer run dev:realtime +) & +pids+=("$!") + +echo +echo "Backend services are launching. Press Ctrl+C to stop them." +echo + +# wait -n needs Bash 4.3+; macOS /bin/bash is 3.2 +wait "${pids[@]}" +exit_code=$? +cleanup +exit "$exit_code"