#!/bin/bash ADMIN_DIR="$(cd "$(dirname "$0")/.." && pwd)/everything-is-suitable-admin" PID_FILE="/tmp/admin-service.pid" LOG_FILE="/tmp/admin-service.log" PORT=${ADMIN_PORT:-5174} start_admin() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "Admin 前端服务已在运行中 (PID: $PID)" return 0 fi fi echo "正在启动 Admin 前端服务 (port: $PORT)..." cd "$ADMIN_DIR" if [ ! -d "node_modules" ]; then echo "安装依赖..." npm install fi nohup npm run dev -- --port "$PORT" > "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" PID=$(cat "$PID_FILE") echo "等待服务启动..." MAX_WAIT=60 WAITED=0 while [ $WAITED -lt $MAX_WAIT ]; do if curl -s "http://localhost:$PORT" > /dev/null 2>&1; then echo "✅ Admin 前端服务已成功启动 (PID: $PID, Port: $PORT)" echo "访问地址: http://localhost:$PORT" echo "日志文件: $LOG_FILE" return 0 fi sleep 2 WAITED=$((WAITED + 2)) printf "\r等待中... %d秒 " $WAITED done echo "" echo "❌ Admin 前端服务启动超时" echo "查看日志: tail -100 $LOG_FILE" stop_admin return 1 } stop_admin() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "正在停止 Admin 前端服务 (PID: $PID)..." kill "$PID" 2>/dev/null sleep 2 if ps -p "$PID" > /dev/null 2>&1; then kill -9 "$PID" 2>/dev/null fi rm -f "$PID_FILE" echo "✅ Admin 前端服务已停止" else echo "Admin 前端服务未运行" rm -f "$PID_FILE" fi else echo "未找到 PID 文件,Admin 前端服务可能未运行" fi } status_admin() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "Admin 前端服务运行中 (PID: $PID, Port: $PORT)" echo "访问地址: http://localhost:$PORT" return 0 fi fi echo "Admin 前端服务未运行" return 1 } logs_admin() { if [ -f "$LOG_FILE" ]; then echo "显示最近100行日志 (Ctrl+C 退出):" tail -100 -f "$LOG_FILE" else echo "日志文件不存在: $LOG_FILE" fi } case "${1:-}" in start) start_admin ;; stop) stop_admin ;; restart) stop_admin sleep 2 start_admin ;; status) status_admin ;; logs) logs_admin ;; *) echo "用法: $0 {start|stop|restart|status|logs}" echo "" echo "环境变量:" echo " ADMIN_PORT - Admin 服务端口 (默认: 5174)" echo "" echo "示例:" echo " ADMIN_PORT=3000 $0 start # 在端口3000启动" echo " $0 logs # 查看日志" exit 1 ;; esac