| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- #!/bin/bash
- # PaddleX PP-StructureV3 服务守护进程脚本
- LOGDIR="/home/ubuntu/zhch/logs"
- mkdir -p $LOGDIR
- PIDFILE="$LOGDIR/ppstructurev3.pid"
- LOGFILE="$LOGDIR/ppstructurev3.log"
- # 配置参数
- CONDA_ENV="paddle" # 根据您的study-notes.md中的环境名
- PORT="8111"
- CUDA_VISIBLE_DEVICES=7
- SCRIPT_DIR="/home/ubuntu/zhch/PaddleX/zhch"
- PIPELINE_CONFIG="$SCRIPT_DIR/my_config/PP-StructureV3.yaml"
- # 正确初始化和激活conda环境
- # 方法1:使用conda.sh脚本初始化
- if [ -f "/home/ubuntu/anaconda3/etc/profile.d/conda.sh" ]; then
- source /home/ubuntu/anaconda3/etc/profile.d/conda.sh
- conda activate $CONDA_ENV
- elif [ -f "/opt/conda/etc/profile.d/conda.sh" ]; then
- source /opt/conda/etc/profile.d/conda.sh
- conda activate $CONDA_ENV
- else
- # 方法2:直接使用conda可执行文件路径
- echo "Warning: Using direct conda path activation"
- export PATH="/home/ubuntu/anaconda3/envs/$CONDA_ENV/bin:$PATH"
- fi
- # 设置模型下载源(可选)
- export PADDLE_PDX_MODEL_SOURCE="bos"
- export PADDLEX_ENABLE_TABLE_ADAPTER="true"
- export PYTHONWARNINGS="ignore::UserWarning"
- start() {
- if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
- echo "PaddleX PP-StructureV3 is already running"
- return 1
- fi
-
- echo "Starting PaddleX PP-StructureV3 daemon..."
- echo "Port: $PORT, Device: $DEVICE"
- echo "Pipeline config: $PIPELINE_CONFIG"
-
- # 检查配置文件是否存在
- if [ ! -f "$PIPELINE_CONFIG" ]; then
- echo "❌ Pipeline config file not found: $PIPELINE_CONFIG"
- return 1
- fi
-
- # 检查conda环境
- if ! command -v python >/dev/null 2>&1; then
- echo "❌ Python not found. Check conda environment activation."
- return 1
- fi
-
- # 检查paddlex命令
- if ! command -v paddlex >/dev/null 2>&1; then
- echo "❌ PaddleX not found. Check installation and environment."
- return 1
- fi
-
- echo "🔧 Using Python: $(which python)"
- echo "🔧 Using PaddleX: $(which paddlex)"
- echo " CUDA Devices: $CUDA_VISIBLE_DEVICES"
-
- # 启动PaddleX服务
- cd $SCRIPT_DIR || exit 1
- nohup $CUDA_VISIBLE_DEVICES; python3 start_paddlex_with_adapter.py --serve \
- --port $PORT \
- --device "gpu" \
- --pipeline "$PIPELINE_CONFIG" \
- > $LOGFILE 2>&1 &
-
- echo $! > $PIDFILE
- echo "✅ PaddleX PP-StructureV3 started with PID: $(cat $PIDFILE)"
- echo "📋 Log file: $LOGFILE"
- echo "🌐 Service URL: http://localhost:$PORT"
- echo "📖 API Documentation: http://localhost:$PORT/docs"
- }
- stop() {
- if [ ! -f $PIDFILE ]; then
- echo "PaddleX PP-StructureV3 is not running"
- return 1
- fi
-
- PID=$(cat $PIDFILE)
- echo "Stopping PaddleX PP-StructureV3 (PID: $PID)..."
-
- # 优雅停止
- kill $PID
-
- # 等待进程结束
- for i in {1..10}; do
- if ! kill -0 $PID 2>/dev/null; then
- break
- fi
- echo "Waiting for process to stop... ($i/10)"
- sleep 1
- done
-
- # 如果进程仍在运行,强制结束
- if kill -0 $PID 2>/dev/null; then
- echo "Force killing process..."
- kill -9 $PID
- fi
-
- rm -f $PIDFILE
- echo "✅ PaddleX PP-StructureV3 stopped"
- }
- status() {
- if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
- PID=$(cat $PIDFILE)
- echo "✅ PaddleX PP-StructureV3 is running (PID: $PID)"
- echo "🌐 Service URL: http://localhost:$PORT"
- echo "📋 Log file: $LOGFILE"
-
- # 检查端口是否被监听
- if command -v netstat >/dev/null 2>&1; then
- if netstat -tuln | grep -q ":$PORT "; then
- echo "🔗 Port $PORT is being listened"
- else
- echo "⚠️ Port $PORT is not being listened (service may be starting up)"
- fi
- fi
-
- # 显示最新日志
- if [ -f $LOGFILE ]; then
- echo "📄 Latest logs (last 5 lines):"
- tail -5 $LOGFILE
- fi
- else
- echo "❌ PaddleX PP-StructureV3 is not running"
- if [ -f $PIDFILE ]; then
- echo "Removing stale PID file..."
- rm -f $PIDFILE
- fi
- fi
- }
- logs() {
- if [ -f $LOGFILE ]; then
- echo "📄 PaddleX PP-StructureV3 logs:"
- echo "=================="
- tail -f $LOGFILE
- else
- echo "❌ Log file not found: $LOGFILE"
- fi
- }
- config() {
- echo "📋 Current configuration:"
- echo " Conda Environment: $CONDA_ENV"
- echo " Port: $PORT"
- echo " Device: $DEVICE"
- echo " Pipeline Config: $PIPELINE_CONFIG"
- echo " Model Source: ${PADDLE_PDX_MODEL_SOURCE:-default}"
- echo " PID File: $PIDFILE"
- echo " Log File: $LOGFILE"
-
- if [ -f "$PIPELINE_CONFIG" ]; then
- echo "✅ Pipeline config file exists"
- else
- echo "❌ Pipeline config file not found"
- fi
-
- # 显示环境信息
- echo ""
- echo "🔧 Environment:"
- echo " Python: $(which python 2>/dev/null || echo 'Not found')"
- echo " PaddleX: $(which paddlex 2>/dev/null || echo 'Not found')"
- echo " Conda: $(which conda 2>/dev/null || echo 'Not found')"
- }
- # 显示使用帮助
- usage() {
- echo "PaddleX PP-StructureV3 Service Daemon"
- echo "======================================"
- echo "Usage: $0 {start|stop|restart|status|logs|config}"
- echo ""
- echo "Commands:"
- echo " start - Start the PaddleX service"
- echo " stop - Stop the PaddleX service"
- echo " restart - Restart the PaddleX service"
- echo " status - Show service status"
- echo " logs - Show service logs (follow mode)"
- echo " config - Show current configuration"
- echo ""
- echo "Configuration (edit script to modify):"
- echo " Port: $PORT"
- echo " Device: $DEVICE"
- echo " Pipeline: $PIPELINE_CONFIG"
- echo ""
- echo "Examples:"
- echo " ./ppstructure_v3_daemon.sh start"
- echo " ./ppstructure_v3_daemon.sh status"
- echo " ./ppstructure_v3_daemon.sh logs"
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- sleep 3
- start
- ;;
- status)
- status
- ;;
- logs)
- logs
- ;;
- config)
- config
- ;;
- *)
- usage
- exit 1
- ;;
- esac
|