|
@@ -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
|