2 Commits 4659b768f4 ... 19170c14dd

Auteur SHA1 Message Date
  jihuaqiang 19170c14dd Merge branch 'main' of https://git.yishihui.com/ai/knowledge-agent il y a 1 semaine
  jihuaqiang ec49228970 进程管理 il y a 1 semaine
1 fichiers modifiés avec 199 ajouts et 35 suppressions
  1. 199 35
      start_service.sh

+ 199 - 35
start_service.sh

@@ -1,41 +1,205 @@
 #!/bin/bash
 
-# Agent 服务启动脚本
-
-echo "🚀 启动 Agent 服务..."
-
-# 检查Python环境
-if ! command -v python3 &> /dev/null; then
-    echo "❌ 错误: 未找到 python3 命令"
-    exit 1
-fi
-
-# 检查依赖
-echo "📦 检查依赖..."
-python3 -c "import fastapi, uvicorn" 2>/dev/null
-if [ $? -ne 0 ]; then
-    echo "❌ 错误: 缺少必要的依赖包"
-    echo "请运行: pip install -r requirements.txt"
-    exit 1
-fi
-
-# 检查 LangGraph
-echo "🔍 检查 LangGraph..."
-python3 -c "import langgraph" 2>/dev/null
-if [ $? -ne 0 ]; then
-    echo "⚠️  警告: LangGraph 未安装,将使用传统模式"
-    echo "如需启用 LangGraph,请运行: pip install langgraph"
+# Agent 服务管理脚本
+
+# 服务配置
+SERVICE_NAME="knowledge-agent"
+PID_FILE="/tmp/${SERVICE_NAME}.pid"
+LOG_FILE="logs/agent.log"
+PORT=8080
+
+# 创建日志目录
+mkdir -p logs
+
+# 显示帮助信息
+show_help() {
+    echo "Usage: $0 {start|stop|restart|status|logs}"
     echo ""
-fi
+    echo "Commands:"
+    echo "  start   - 启动服务"
+    echo "  stop    - 停止服务"
+    echo "  restart - 重启服务"
+    echo "  status  - 查看服务状态"
+    echo "  logs    - 查看实时日志"
+    echo ""
+    echo "Examples:"
+    echo "  $0 start    # 启动服务"
+    echo "  $0 stop     # 停止服务"
+    echo "  $0 logs     # 查看实时日志"
+    echo "  tail -f logs/agent.log  # 也可以直接使用 tail 命令"
+}
 
-# 启动服务
-echo "🌟 启动服务..."
-echo "📍 服务地址: http://localhost:8080"
-echo "📚 API文档: http://localhost:8080/docs"
-echo "🔍 健康检查: http://localhost:8080/health"
-echo ""
-echo "按 Ctrl+C 停止服务"
-echo ""
+# 检查服务是否运行
+is_running() {
+    if [ -f "$PID_FILE" ]; then
+        pid=$(cat "$PID_FILE")
+        if ps -p "$pid" > /dev/null 2>&1; then
+            return 0
+        else
+            rm -f "$PID_FILE"
+        fi
+    fi
+    return 1
+}
 
 # 启动服务
-python3 agent.py 
+start_service() {
+    echo "🚀 启动 ${SERVICE_NAME} 服务..."
+    
+    # 检查Python环境
+    if ! command -v python3 &> /dev/null; then
+        echo "❌ 错误: 未找到 python3 命令"
+        exit 1
+    fi
+    
+    # 检查依赖
+    echo "📦 检查依赖..."
+    python3 -c "import fastapi, uvicorn" 2>/dev/null
+    if [ $? -ne 0 ]; then
+        echo "❌ 错误: 缺少必要的依赖包"
+        echo "请运行: pip install -r requirements.txt"
+        exit 1
+    fi
+    
+    # 检查 LangGraph
+    echo "🔍 检查 LangGraph..."
+    python3 -c "import langgraph" 2>/dev/null
+    if [ $? -ne 0 ]; then
+        echo "⚠️  警告: LangGraph 未安装,将使用传统模式"
+        echo "如需启用 LangGraph,请运行: pip install langgraph"
+        echo ""
+    fi
+    
+    # 检查服务是否已经运行
+    if is_running; then
+        echo "⚠️  警告: 服务已经在运行中 (PID: $(cat "$PID_FILE"))"
+        echo "如需重启,请使用: $0 restart"
+        exit 1
+    fi
+    
+    # 启动服务
+    echo "🌟 启动服务..."
+    echo "📍 服务地址: http://localhost:${PORT}"
+    echo "📚 API文档: http://localhost:${PORT}/docs"
+    echo "🔍 健康检查: http://localhost:${PORT}/health"
+    echo "📝 日志文件: ${LOG_FILE}"
+    echo ""
+    
+    # 后台启动服务,记录PID
+    nohup python3 agent.py > "$LOG_FILE" 2>&1 &
+    echo $! > "$PID_FILE"
+    
+    # 等待服务启动
+    sleep 2
+    
+    if is_running; then
+        echo "✅ 服务启动成功! (PID: $(cat "$PID_FILE"))"
+        echo "📝 查看日志: $0 logs 或 tail -f ${LOG_FILE}"
+        echo "🛑 停止服务: $0 stop"
+    else
+        echo "❌ 服务启动失败,请检查日志: ${LOG_FILE}"
+        rm -f "$PID_FILE"
+        exit 1
+    fi
+}
+
+# 停止服务
+stop_service() {
+    echo "🛑 停止 ${SERVICE_NAME} 服务..."
+    
+    if is_running; then
+        pid=$(cat "$PID_FILE")
+        echo "正在停止进程 PID: $pid"
+        
+        # 尝试优雅停止
+        kill "$pid" 2>/dev/null
+        
+        # 等待进程结束
+        for i in {1..10}; do
+            if ! ps -p "$pid" > /dev/null 2>&1; then
+                break
+            fi
+            echo "等待进程结束... ($i/10)"
+            sleep 1
+        done
+        
+        # 如果进程仍然存在,强制杀死
+        if ps -p "$pid" > /dev/null 2>&1; then
+            echo "强制停止进程..."
+            kill -9 "$pid" 2>/dev/null
+        fi
+        
+        rm -f "$PID_FILE"
+        echo "✅ 服务已停止"
+    else
+        echo "ℹ️  服务未运行"
+    fi
+}
+
+# 重启服务
+restart_service() {
+    echo "🔄 重启 ${SERVICE_NAME} 服务..."
+    stop_service
+    sleep 2
+    start_service
+}
+
+# 查看服务状态
+show_status() {
+    echo "🔍 ${SERVICE_NAME} 服务状态:"
+    
+    if is_running; then
+        pid=$(cat "$PID_FILE")
+        echo "✅ 状态: 运行中"
+        echo "📊 PID: $pid"
+        echo "📍 端口: $PORT"
+        echo "📝 日志: $LOG_FILE"
+        echo "🔗 地址: http://localhost:${PORT}"
+        
+        # 显示进程信息
+        echo ""
+        echo "📋 进程信息:"
+        ps -p "$pid" -o pid,ppid,cmd,etime
+    else
+        echo "❌ 状态: 未运行"
+        echo "💡 启动服务: $0 start"
+    fi
+}
+
+# 查看实时日志
+show_logs() {
+    echo "📝 查看实时日志 (按 Ctrl+C 退出)..."
+    echo "日志文件: ${LOG_FILE}"
+    echo ""
+    
+    if [ -f "$LOG_FILE" ]; then
+        tail -f "$LOG_FILE"
+    else
+        echo "❌ 日志文件不存在: ${LOG_FILE}"
+        echo "请先启动服务: $0 start"
+        exit 1
+    fi
+}
+
+# 主逻辑
+case "$1" in
+    start)
+        start_service
+        ;;
+    stop)
+        stop_service
+        ;;
+    restart)
+        restart_service
+        ;;
+    status)
+        show_status
+        ;;
+    logs)
+        show_logs
+        ;;
+    *)
+        show_help
+        exit 1
+        ;;
+esac