start_api_in_container.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/env sh
  2. # 在 Docker 容器内后台启动 pdf_converter_v2 API 服务,并写日志
  3. # 使用:在 Clerk2.5 根目录执行 sh start_api_in_container.sh,或在 pdf_converter_v2 下执行 sh scripts/start_api_in_container.sh
  4. # 工作目录:脚本会自动进入 pdf_converter_v2 所在目录(含 api_server.py)
  5. # 日志:默认 $CLERK_ROOT/logs/pdf-converter-v2-api.log,可通过 PDF_CONVERTER_API_LOG 覆盖
  6. # 端口:默认 4214,可通过 PDF_CONVERTER_API_PORT 覆盖
  7. set -e
  8. # 兼容 sh/bash:用 $0 取脚本所在目录(sh 下无 BASH_SOURCE)
  9. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  10. # 若脚本在 pdf_converter_v2/scripts/ 下,则上一级即 pdf_converter_v2;若在 Clerk2.5 根下,则用 Clerk2.5/pdf_converter_v2
  11. if [ -f "$SCRIPT_DIR/../api_server.py" ]; then
  12. PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
  13. else
  14. if [ -f "$SCRIPT_DIR/pdf_converter_v2/api_server.py" ]; then
  15. PROJECT_ROOT="$SCRIPT_DIR/pdf_converter_v2"
  16. else
  17. echo "错误: 未找到 api_server.py,请从 Clerk2.5 或 pdf_converter_v2 目录执行本脚本" >&2
  18. exit 1
  19. fi
  20. fi
  21. CLERK_ROOT="${CLERK_ROOT:-$(cd "$PROJECT_ROOT/.." 2>/dev/null && pwd || echo "$PROJECT_ROOT")}"
  22. PORT="${PDF_CONVERTER_API_PORT:-4214}"
  23. LOG_DIR="${CLERK_ROOT}/logs"
  24. LOG_FILE="${PDF_CONVERTER_API_LOG:-${LOG_DIR}/pdf-converter-v2-api.log}"
  25. PID_FILE="${LOG_DIR}/pdf-converter-v2-api.pid"
  26. # NPU 容器内:PaddleOCR 走 NPU,MinerU 用 pipeline
  27. export PADDLE_OCR_DEVICE="${PADDLE_OCR_DEVICE:-npu:0}"
  28. export BACKEND="${BACKEND:-pipeline}"
  29. export API_URL="${API_URL:-http://127.0.0.1:5282}"
  30. mkdir -p "$LOG_DIR"
  31. cd "$PROJECT_ROOT"
  32. # 若已有 PID 文件且进程存在,先提示
  33. if [ -f "$PID_FILE" ]; then
  34. OLD_PID=$(cat "$PID_FILE")
  35. if kill -0 "$OLD_PID" 2>/dev/null; then
  36. echo "已有进程在运行 PID=$OLD_PID,日志: $LOG_FILE" >&2
  37. exit 1
  38. fi
  39. rm -f "$PID_FILE"
  40. fi
  41. nohup python3 api_server.py --host 0.0.0.0 --port "$PORT" >> "$LOG_FILE" 2>&1 &
  42. echo $! > "$PID_FILE"
  43. echo "已后台启动 pdf_converter_v2 API,端口 $PORT"
  44. echo " PID: $(cat $PID_FILE)"
  45. echo " 日志: $LOG_FILE"
  46. echo " 查看: tail -f $LOG_FILE"