|
|
@@ -0,0 +1,190 @@
|
|
|
+#!/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"
|
|
|
+DEVICE="gpu:3"
|
|
|
+PIPELINE_CONFIG="/home/ubuntu/zhch/PaddleX/zhch/my_config/PP-StructureV3.yaml"
|
|
|
+
|
|
|
+# 激活conda环境
|
|
|
+conda activate $CONDA_ENV
|
|
|
+
|
|
|
+# 设置模型下载源(可选)
|
|
|
+export PADDLE_PDX_MODEL_SOURCE="bos"
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
+ # 启动PaddleX服务
|
|
|
+ nohup paddlex --serve \
|
|
|
+ --port $PORT \
|
|
|
+ --device "$DEVICE" \
|
|
|
+ --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
|
|
|
+}
|
|
|
+
|
|
|
+# 显示使用帮助
|
|
|
+usage() {
|
|
|
+ echo "PaddleX PP-StructureV3 Service Daemon"
|
|
|
+ echo "======================================"
|
|
|
+ echo "Usage: $0 {start|stop|restart|status|logs|test|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
|