#!/bin/bash API_DIR="$(cd "$(dirname "$0")/.." && pwd)/everything-is-suitable-api/everything-is-suitable-app" PID_FILE="/tmp/everything-is-suitable-api.pid" LOG_FILE="/tmp/every-is-suitable-api.log" PORT=${API_PORT:-8080} start_api() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "API 服务已在运行中 (PID: $PID)" return 0 fi fi echo "正在启动 API 服务..." cd "$API_DIR" mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=$PORT" > "$LOG_FILE" 2>&1 & PID=$! echo $PID > "$PID_FILE" echo "等待服务启动..." MAX_WAIT=60 WAITED=0 while [ $WAITED -lt $MAX_WAIT ]; do if curl -s "http://localhost:$PORT/actuator/health" > /dev/null 2>&1; then echo "✅ API 服务已成功启动 (PID: $PID, Port: $PORT)" echo "日志文件: $LOG_FILE" return 0 fi sleep 2 WAITED=$((WAITED + 2)) echo "等待中... ($WAITED 秒)" done echo "❌ API 服务启动超时" stop_api return 1 } stop_api() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "正在停止 API 服务 (PID: $PID)..." kill "$PID" rm -f "$PID_FILE" echo "✅ API 服务已停止" else echo "API 服务未运行" rm -f "$PID_FILE" fi else echo "未找到 PID 文件,API 服务可能未运行" fi } status_api() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "API 服务运行中 (PID: $PID, Port: $PORT)" curl -s "http://localhost:$PORT/actuator/health" | jq . 2>/dev/null || echo "健康检查端点可访问" return 0 fi fi echo "API 服务未运行" return 1 } case "${1:-}" in start) start_api ;; stop) stop_api ;; restart) stop_api sleep 2 start_api ;; status) status_api ;; *) echo "用法: $0 {start|stop|restart|status}" echo "" echo "环境变量:" echo " API_PORT - API 服务端口 (默认: 8080)" exit 1 ;; esac