158 lines
4.5 KiB
Bash
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 ""
|