#!/bin/bash # 生产环境服务状态查看脚本 # 用于查看 FastAPI 后端服务的运行状态 # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}📊 Lyrria 后端服务状态${NC}" echo "==================================" echo "" PID_FILE="$SCRIPT_DIR/backend.pid" if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo -e "${GREEN}✅ 服务运行中${NC}" echo " PID: $PID" ps -p "$PID" -o pid,etime,cmd --no-headers | awk '{print " 运行时间: " $2}' # 显示端口占用情况 PORT_INFO=$(lsof -i :8000 -P -n 2>/dev/null | grep LISTEN || true) if [ -n "$PORT_INFO" ]; then echo " 端口 8000: 已监听" else echo -e " ${YELLOW}端口 8000: 未监听${NC}" fi else echo -e "${RED}❌ 服务未运行 (PID 文件存在但进程不存在)${NC}" fi else # 尝试通过进程名查找 PIDS=$(pgrep -f "uvicorn main:app" || true) if [ -n "$PIDS" ]; then echo -e "${YELLOW}⚠️ 服务运行中 (但未找到 PID 文件)${NC}" echo " PIDs: $PIDS" else echo -e "${RED}❌ 服务未运行${NC}" fi fi echo "" # 显示日志文件信息 if [ -f "$SCRIPT_DIR/backend_nohup.log" ]; then LOG_SIZE=$(ls -lh "$SCRIPT_DIR/backend_nohup.log" | awk '{print $5}') LOG_TIME=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$SCRIPT_DIR/backend_nohup.log" 2>/dev/null || stat -c "%y" "$SCRIPT_DIR/backend_nohup.log" 2>/dev/null | cut -d. -f1) echo " 后台日志: backend_nohup.log ($LOG_SIZE, 最后更新: $LOG_TIME)" fi if [ -d "$SCRIPT_DIR/logs" ]; then LOG_COUNT=$(ls -1 "$SCRIPT_DIR/logs"/*.log 2>/dev/null | wc -l | tr -d ' ') if [ "$LOG_COUNT" -gt 0 ]; then echo " 应用日志: logs/ 目录 ($LOG_COUNT 个日志文件)" fi fi echo "" echo "==================================" echo -e "${BLUE}💡 提示:${NC}" echo " 启动服务: ./start_prod.sh" echo " 停止服务: ./stop_prod.sh" echo " 查看日志: tail -f backend_nohup.log" echo " 查看应用日志: tail -f logs/request_*.log"