一键部署:主程序+OCR同机(screen/GPU),Ollama外置局域网。
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
# OCR Worker 共用函数:同机 GPU 识别 + screen 常驻
|
||||
OCR_SCREEN_NAME="${OCR_SCREEN_NAME:-ocr-worker}"
|
||||
OCR_PORT="${OCR_PORT:-23567}"
|
||||
|
||||
ocr_worker_dir() {
|
||||
echo "${INSTALL_DIR}/deploy/ocr-worker"
|
||||
}
|
||||
|
||||
install_ocr_worker() {
|
||||
local worker_dir
|
||||
worker_dir="$(ocr_worker_dir)"
|
||||
if [[ ! -d "${worker_dir}" ]]; then
|
||||
log_error "未找到 ${worker_dir}"
|
||||
return 1
|
||||
fi
|
||||
log_info "安装/更新 OCR Worker (PaddleOCR GPU)…"
|
||||
chmod +x "${worker_dir}"/*.sh 2>/dev/null || true
|
||||
OCR_PORT="${OCR_PORT}" bash "${worker_dir}/install.sh"
|
||||
}
|
||||
|
||||
ocr_screen_running() {
|
||||
screen -list 2>/dev/null | grep -q "\.${OCR_SCREEN_NAME}[[:space:]]"
|
||||
}
|
||||
|
||||
start_ocr_screen() {
|
||||
local worker_dir
|
||||
worker_dir="$(ocr_worker_dir)"
|
||||
if [[ ! -x "${worker_dir}/.venv/bin/uvicorn" ]]; then
|
||||
log_warn "OCR Worker 未安装,跳过 screen 启动"
|
||||
return 1
|
||||
fi
|
||||
if ! command -v screen >/dev/null; then
|
||||
log_error "未安装 screen,请 apt install screen"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_info "启动 OCR Worker → screen 会话「${OCR_SCREEN_NAME}」(GPU 常驻, 端口 ${OCR_PORT})"
|
||||
if ocr_screen_running; then
|
||||
screen -S "${OCR_SCREEN_NAME}" -X quit 2>/dev/null || true
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
screen -dmS "${OCR_SCREEN_NAME}" bash -lc "
|
||||
cd '${worker_dir}' &&
|
||||
export OCR_USE_GPU=true OCR_PORT='${OCR_PORT}' OCR_HOST=0.0.0.0 &&
|
||||
exec bash run.sh
|
||||
"
|
||||
sleep 1
|
||||
}
|
||||
|
||||
stop_ocr_screen() {
|
||||
if ocr_screen_running; then
|
||||
log_info "停止 OCR screen 会话…"
|
||||
screen -S "${OCR_SCREEN_NAME}" -X quit 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
wait_ocr_healthy() {
|
||||
local i
|
||||
for i in $(seq 1 90); do
|
||||
if curl -sf "http://127.0.0.1:${OCR_PORT}/health" >/dev/null 2>&1; then
|
||||
log_info "OCR 健康检查通过 — http://127.0.0.1:${OCR_PORT}/health"
|
||||
return 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
log_warn "OCR 尚未就绪(模型加载可能需 1–3 分钟)"
|
||||
log_warn "查看: bash ${INSTALL_DIR}/deploy/ocr-screen.sh status"
|
||||
return 1
|
||||
}
|
||||
|
||||
show_ocr_status() {
|
||||
echo ""
|
||||
echo "--- OCR Worker (screen: ${OCR_SCREEN_NAME}) ---"
|
||||
if ocr_screen_running; then
|
||||
echo "screen: 运行中"
|
||||
screen -list 2>/dev/null | grep "${OCR_SCREEN_NAME}" || true
|
||||
else
|
||||
echo "screen: 未运行"
|
||||
fi
|
||||
if curl -sf "http://127.0.0.1:${OCR_PORT}/health" 2>/dev/null; then
|
||||
echo ""
|
||||
else
|
||||
echo "health: 无响应 (http://127.0.0.1:${OCR_PORT}/health)"
|
||||
fi
|
||||
if command -v nvidia-smi >/dev/null; then
|
||||
nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu --format=csv,noheader 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user