| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #!/bin/bash
- # LangGraph 本地启动脚本(测试环境 AI 智能体)
- # 用法: ./start.sh # 启动/重启服务(端口 9000)
- # ./start.sh stop # 停止服务
- #
- # 说明:
- # - 服务: app.main:app(FastAPI + LangGraph + ChromaDB + faster-whisper)
- # - 端口: 9000(后端 application.yml 的 langgraph.base-url 默认指向 http://localhost:9000)
- # - ChromaDB 依赖 sqlite3>=3.35,本机系统 sqlite 3.26 → 由 .venv site-packages/sitecustomize.py
- # 用 pysqlite3 兜底(ChromaDB 官方 workaround,已在 venv 内生效)
- # - AxonHub 网关无 embedding 模型 → 关闭知识库定时同步(KB_SYNC_ENABLED=false),
- # 避免每小时报错刷屏;RAG/记忆调用被应用层 try/except 兜底
- set -euo pipefail
- cd "$(dirname "$0")"
- PORT="${SERVICE_PORT:-9000}"
- LOG_FILE="${LANGGRAPH_LOG:-/sc-data/cfc/cfc-langgraph/langgraph.log}"
- PID_FILE=".langgraph.pid"
- stop() {
- if [ -f "$PID_FILE" ]; then
- local pid
- pid=$(cat "$PID_FILE")
- if kill -0 "$pid" 2>/dev/null; then
- echo "停止 langgraph (PID=$pid)..."
- kill "$pid" 2>/dev/null || true
- sleep 3
- kill -0 "$pid" 2>/dev/null && kill -9 "$pid" 2>/dev/null || true
- fi
- rm -f "$PID_FILE"
- fi
- }
- start() {
- # 已在运行则不重复启动
- if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
- echo "langgraph 已在运行 (PID=$(cat "$PID_FILE")),端口 $PORT"
- return 0
- fi
- export KB_SYNC_ENABLED="${KB_SYNC_ENABLED:-false}"
- # setsid 脱离当前会话/进程组,避免 shell 命令结束时被 killpg 连带终止
- setsid nohup .venv/bin/python -m uvicorn app.main:app \
- --host 0.0.0.0 --port "$PORT" \
- --workers 1 --log-level info \
- >> "$LOG_FILE" 2>&1 < /dev/null &
- echo $! > "$PID_FILE"
- echo "启动 langgraph (PID=$!),日志: $LOG_FILE,端口 $PORT"
- }
- case "${1:-start}" in
- stop) stop ;;
- restart) stop; sleep 1; start ;;
- *) start ;;
- esac
|