chore:启动脚本

This commit is contained in:
Leon
2025-12-26 22:50:05 +08:00
parent a0d6464d9d
commit e5246581ff

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env sh #!/usr/bin/env bash
set -eu set -euo pipefail
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
cd "$ROOT_DIR" cd "$ROOT_DIR"
@@ -39,11 +39,27 @@ require_cmd() {
} }
BACKEND_PID="" BACKEND_PID=""
FRONTEND_PID=""
cleanup() { cleanup() {
set +e
if [ -n "${FRONTEND_PID:-}" ]; then
echo "[start.sh] Stopping frontend (pid=$FRONTEND_PID)"
kill "$FRONTEND_PID" >/dev/null 2>&1 || true
fi
if [ -n "${BACKEND_PID:-}" ]; then if [ -n "${BACKEND_PID:-}" ]; then
echo "[start.sh] Stopping backend (pid=$BACKEND_PID)" echo "[start.sh] Stopping backend (pid=$BACKEND_PID)"
kill "$BACKEND_PID" >/dev/null 2>&1 || true kill "$BACKEND_PID" >/dev/null 2>&1 || true
fi fi
# On Windows Git Bash, child processes sometimes don't receive signals reliably.
# Fall back to taskkill when available.
if command -v taskkill >/dev/null 2>&1; then
if [ -n "${FRONTEND_PID:-}" ]; then
taskkill //PID "$FRONTEND_PID" //T //F >/dev/null 2>&1 || true
fi
if [ -n "${BACKEND_PID:-}" ]; then
taskkill //PID "$BACKEND_PID" //T //F >/dev/null 2>&1 || true
fi
fi
} }
trap cleanup INT TERM EXIT trap cleanup INT TERM EXIT
@@ -55,6 +71,7 @@ fi
if [ "$START_FRONTEND" = "1" ]; then if [ "$START_FRONTEND" = "1" ]; then
require_dir frontend "$FRONTEND_DIR" require_dir frontend "$FRONTEND_DIR"
mkdir -p "$RUN_DIR"
require_cmd npm require_cmd npm
fi fi
@@ -88,34 +105,34 @@ start_backend_bg() {
echo "[start.sh] Backend PID: $BACKEND_PID" echo "[start.sh] Backend PID: $BACKEND_PID"
} }
start_backend_fg() { start_frontend_bg() {
echo "[start.sh] Starting backend"
cd "$BACKEND_DIR"
go run ./cmd
}
start_frontend_fg() {
if [ "$FRONTEND_INSTALL" = "1" ] || { [ "$FRONTEND_INSTALL" = "auto" ] && [ ! -d "$FRONTEND_DIR/node_modules" ]; }; then if [ "$FRONTEND_INSTALL" = "1" ] || { [ "$FRONTEND_INSTALL" = "auto" ] && [ ! -d "$FRONTEND_DIR/node_modules" ]; }; then
echo "[start.sh] Installing frontend deps" echo "[start.sh] Installing frontend deps"
(cd "$FRONTEND_DIR" && npm install) (cd "$FRONTEND_DIR" && npm install)
fi fi
echo "[start.sh] Starting frontend (npm run $FRONTEND_SCRIPT)" echo "[start.sh] Starting frontend (background, npm run $FRONTEND_SCRIPT)"
cd "$FRONTEND_DIR" (cd "$FRONTEND_DIR" && npm run "$FRONTEND_SCRIPT") &
npm run "$FRONTEND_SCRIPT" FRONTEND_PID=$!
echo "$FRONTEND_PID" >"$RUN_DIR/frontend.pid"
echo "[start.sh] Frontend PID: $FRONTEND_PID"
} }
if [ "$START_REDIS" = "1" ] && [ "$START_BACKEND" = "1" ]; then if [ "$START_REDIS" = "1" ] && [ "$START_BACKEND" = "1" ]; then
start_redis start_redis
fi fi
if [ "$START_BACKEND" = "1" ] && [ "$START_FRONTEND" = "1" ]; then if [ "$START_BACKEND" = "1" ]; then
start_backend_bg start_backend_bg
start_frontend_fg fi
elif [ "$START_BACKEND" = "1" ]; then
start_backend_fg if [ "$START_FRONTEND" = "1" ]; then
elif [ "$START_FRONTEND" = "1" ]; then start_frontend_bg
start_frontend_fg fi
if [ "$START_BACKEND" = "1" ] || [ "$START_FRONTEND" = "1" ]; then
echo "[start.sh] Press Ctrl+C to stop."
wait
else else
echo "[start.sh] Nothing to start. Set START_BACKEND=1 and/or START_FRONTEND=1." echo "[start.sh] Nothing to start. Set START_BACKEND=1 and/or START_FRONTEND=1."
fi fi