123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #!/bin/bash
- # 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 ""
- 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 命令"
- }
- # 检查服务是否运行
- 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
- }
- # 启动服务
- 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
|