| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #!/bin/bash
- # MinerU 推理服务启动脚本 (vLLM)
- # 1. 环境配置
- export MINERU_LMDEPLOY_DEVICE=ascend
- export MINERU_MODEL_SOURCE=modelscope
- export VLLM_WORKER_MULTIPROC_METHOD=spawn
- export MINERU_OPENAI_PORT=30000
- # 日志配置
- LOG_DIR="/var/log/minerU"
- LOG_FILE="${LOG_DIR}/mineru-openai.log"
- echo "=========================================="
- echo "🚀 正在启动 MinerU 推理服务 (vLLM)..."
- echo "📍 端口: ${MINERU_OPENAI_PORT}"
- echo "📂 日志: ${LOG_FILE}"
- echo "=========================================="
- # 确保日志目录存在
- mkdir -p "${LOG_DIR}"
- # 2. 检查并清理端口占用
- python3 -c "
- import os, glob
- def cleanup(port):
- port_hex = f'{port:04X}'
- inodes = set()
- for net_file in ['/proc/net/tcp', '/proc/net/tcp6']:
- if os.path.exists(net_file):
- with open(net_file, 'r') as f:
- for line in f:
- parts = line.split()
- if len(parts) > 1 and parts[1].endswith(':' + port_hex): inodes.add(parts[9])
- if not inodes: return
- for fd_dir in glob.glob('/proc/[0-9]*/fd'):
- try:
- for fd in os.listdir(fd_dir):
- try:
- link = os.readlink(os.path.join(fd_dir, fd))
- for inode in inodes:
- if f'socket:[{inode}]' in link:
- pid = fd_dir.split('/')[2]
- if int(pid) != os.getpid():
- print(f' ⚠️ 清理占用端口 {port} 的进程 {pid}...')
- os.kill(int(pid), 9)
- except: continue
- except: continue
- cleanup(${MINERU_OPENAI_PORT})
- "
- # 3. 启动服务 (使用 nohup 确保后台运行)
- echo "--- 启动于 $(date) ---" > "${LOG_FILE}"
- nohup mineru-openai-server >> "${LOG_FILE}" 2>&1 &
- # 分离进程,防止终端退出影响服务
- disown
- echo "=========================================="
- echo "✅ 推理服务已在后台启动!"
- echo "📄 查看日志: tail -f ${LOG_FILE}"
- echo "=========================================="
|