#!/bin/bash # status.sh - 查看服务运行状态 # 支持: Vite开发模式 或 预构建静态服务 set -e LOG_DIR="logs" PID_FILE_API="$LOG_DIR/api.pid" PID_FILE_FRONTEND="$LOG_DIR/frontend.pid" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' # 加载配置 if [ -f ".env" ]; then export $(grep -v '^#' .env | grep -E '^(API_PORT|FRONTEND_PORT|FRONTEND_MODE)' | xargs 2>/dev/null || true) fi API_PORT=${API_PORT:-8000} FRONTEND_PORT=${FRONTEND_PORT:-5173} FRONTEND_MODE=${FRONTEND_MODE:-dev} echo "" echo -e "${CYAN}========================================${NC}" echo -e "${CYAN} AI+合规智能中枢 - 服务状态${NC}" echo -e "${CYAN}========================================${NC}" echo "" # ===== API状态 ===== echo -e "${YELLOW}API服务:${NC}" API_RUNNING=false if [ -f "$PID_FILE_API" ]; then PID=$(cat $PID_FILE_API) if ps -p $PID > /dev/null 2>&1; then API_RUNNING=true echo -e " 状态: ${GREEN}运行中 ✓${NC}" echo " PID: $PID" # 检查端口 if command -v curl > /dev/null 2>&1; then HEALTH=$(curl -s http://localhost:$API_PORT/health 2>/dev/null || echo '{"status":"error"}') if echo "$HEALTH" | grep -q "healthy"; then echo -e " 健康检查: ${GREEN}正常 ✓${NC}" else echo -e " 健康检查: ${RED}异常${NC}" fi fi else echo -e " 状态: ${RED}已停止${NC} (PID文件存在但进程不存在)" rm -f $PID_FILE_API fi else # 尝试查找uvicorn进程 UVICORN_PID=$(pgrep -f "uvicorn app.main:app" 2>/dev/null || true) if [ -n "$UVICORN_PID" ]; then echo -e " 状态: ${GREEN}运行中 ✓${NC} (无PID文件)" echo " PID: $UVICORN_PID" API_RUNNING=true else echo -e " 状态: ${RED}已停止${NC}" fi fi echo " 地址: http://localhost:$API_PORT" echo " 文档: http://localhost:$API_PORT/docs" echo "" # ===== 前端状态 ===== echo -e "${YELLOW}前端服务 (模式: $FRONTEND_MODE):${NC}" FRONTEND_RUNNING=false if [ -f "$PID_FILE_FRONTEND" ]; then PID=$(cat $PID_FILE_FRONTEND) if ps -p $PID > /dev/null 2>&1; then FRONTEND_RUNNING=true echo -e " 状态: ${GREEN}运行中 ✓${NC}" echo " PID: $PID" # 显示前端模式 if [ "$FRONTEND_MODE" = "dev" ]; then echo -e " 模式: ${CYAN}Vite开发模式${NC}" else echo -e " 模式: ${CYAN}预构建静态服务${NC}" fi else echo -e " 状态: ${RED}已停止${NC} (PID文件存在但进程不存在)" rm -f $PID_FILE_FRONTEND fi else # 查找Vite/npm进程 VITE_PID=$(pgrep -f "vite" 2>/dev/null || true) HTTP_PID=$(pgrep -f "http.server $FRONTEND_PORT" 2>/dev/null || true) if [ -n "$VITE_PID" ]; then echo -e " 状态: ${GREEN}运行中 ✓${NC} (无PID文件)" echo " PID: $VITE_PID (Vite)" FRONTEND_RUNNING=true elif [ -n "$HTTP_PID" ]; then echo -e " 状态: ${GREEN}运行中 ✓${NC} (无PID文件)" echo " PID: $HTTP_PID (静态)" FRONTEND_RUNNING=true else echo -e " 状态: ${RED}已停止${NC}" fi fi echo " 地址: http://localhost:$FRONTEND_PORT" echo "" # ===== Docker容器状态 ===== echo -e "${YELLOW}Docker服务:${NC}" if command -v docker > /dev/null 2>&1; then CONTAINERS="milvus minio redis postgres" for container in $CONTAINERS; do if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then echo -e " $container: ${GREEN}运行中 ✓${NC}" elif docker ps -a --format '{{.Names}}' | grep -q "^${container}$"; then echo -e " $container: ${RED}已停止${NC}" else echo -e " $container: ${YELLOW}不存在${NC}" fi done else echo -e " ${YELLOW}Docker未安装${NC}" fi echo "" # ===== 总结 ===== echo -e "${CYAN}========================================${NC}" if [ "$API_RUNNING" = true ] && [ "$FRONTEND_RUNNING" = true ]; then echo -e "${GREEN} 所有服务正常运行 ✓${NC}" else if [ "$API_RUNNING" = false ]; then echo -e "${RED} API服务未运行${NC}" fi if [ "$FRONTEND_RUNNING" = false ]; then echo -e "${RED} 前端服务未运行${NC}" fi echo "" echo -e "${YELLOW}启动服务: ./start_all.sh${NC}" fi echo -e "${CYAN}========================================${NC}" echo ""