Files
AIRegulation-DocAnalysis/status.sh
2026-05-14 15:07:34 +08:00

158 lines
4.5 KiB
Bash

#!/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 ""