ppstructure_v3_daemon.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #!/bin/bash
  2. # PaddleX PP-StructureV3 服务守护进程脚本
  3. LOGDIR="/home/ubuntu/zhch/logs"
  4. mkdir -p $LOGDIR
  5. PIDFILE="$LOGDIR/ppstructurev3.pid"
  6. LOGFILE="$LOGDIR/ppstructurev3.log"
  7. # 配置参数
  8. CONDA_ENV="paddle" # 根据您的study-notes.md中的环境名
  9. PORT="8111"
  10. DEVICE="gpu:3"
  11. PIPELINE_CONFIG="/home/ubuntu/zhch/PaddleX/zhch/my_config/PP-StructureV3.yaml"
  12. # 激活conda环境
  13. conda activate $CONDA_ENV
  14. # 设置模型下载源(可选)
  15. export PADDLE_PDX_MODEL_SOURCE="bos"
  16. start() {
  17. if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
  18. echo "PaddleX PP-StructureV3 is already running"
  19. return 1
  20. fi
  21. echo "Starting PaddleX PP-StructureV3 daemon..."
  22. echo "Port: $PORT, Device: $DEVICE"
  23. echo "Pipeline config: $PIPELINE_CONFIG"
  24. # 检查配置文件是否存在
  25. if [ ! -f "$PIPELINE_CONFIG" ]; then
  26. echo "❌ Pipeline config file not found: $PIPELINE_CONFIG"
  27. return 1
  28. fi
  29. # 启动PaddleX服务
  30. nohup paddlex --serve \
  31. --port $PORT \
  32. --device "$DEVICE" \
  33. --pipeline "$PIPELINE_CONFIG" \
  34. > $LOGFILE 2>&1 &
  35. echo $! > $PIDFILE
  36. echo "✅ PaddleX PP-StructureV3 started with PID: $(cat $PIDFILE)"
  37. echo "📋 Log file: $LOGFILE"
  38. echo "🌐 Service URL: http://localhost:$PORT"
  39. echo "📖 API Documentation: http://localhost:$PORT/docs"
  40. }
  41. stop() {
  42. if [ ! -f $PIDFILE ]; then
  43. echo "PaddleX PP-StructureV3 is not running"
  44. return 1
  45. fi
  46. PID=$(cat $PIDFILE)
  47. echo "Stopping PaddleX PP-StructureV3 (PID: $PID)..."
  48. # 优雅停止
  49. kill $PID
  50. # 等待进程结束
  51. for i in {1..10}; do
  52. if ! kill -0 $PID 2>/dev/null; then
  53. break
  54. fi
  55. echo "Waiting for process to stop... ($i/10)"
  56. sleep 1
  57. done
  58. # 如果进程仍在运行,强制结束
  59. if kill -0 $PID 2>/dev/null; then
  60. echo "Force killing process..."
  61. kill -9 $PID
  62. fi
  63. rm -f $PIDFILE
  64. echo "✅ PaddleX PP-StructureV3 stopped"
  65. }
  66. status() {
  67. if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
  68. PID=$(cat $PIDFILE)
  69. echo "✅ PaddleX PP-StructureV3 is running (PID: $PID)"
  70. echo "🌐 Service URL: http://localhost:$PORT"
  71. echo "📋 Log file: $LOGFILE"
  72. # 检查端口是否被监听
  73. if command -v netstat >/dev/null 2>&1; then
  74. if netstat -tuln | grep -q ":$PORT "; then
  75. echo "🔗 Port $PORT is being listened"
  76. else
  77. echo "⚠️ Port $PORT is not being listened (service may be starting up)"
  78. fi
  79. fi
  80. # 显示最新日志
  81. if [ -f $LOGFILE ]; then
  82. echo "📄 Latest logs (last 5 lines):"
  83. tail -5 $LOGFILE
  84. fi
  85. else
  86. echo "❌ PaddleX PP-StructureV3 is not running"
  87. if [ -f $PIDFILE ]; then
  88. echo "Removing stale PID file..."
  89. rm -f $PIDFILE
  90. fi
  91. fi
  92. }
  93. logs() {
  94. if [ -f $LOGFILE ]; then
  95. echo "📄 PaddleX PP-StructureV3 logs:"
  96. echo "=================="
  97. tail -f $LOGFILE
  98. else
  99. echo "❌ Log file not found: $LOGFILE"
  100. fi
  101. }
  102. config() {
  103. echo "📋 Current configuration:"
  104. echo " Conda Environment: $CONDA_ENV"
  105. echo " Port: $PORT"
  106. echo " Device: $DEVICE"
  107. echo " Pipeline Config: $PIPELINE_CONFIG"
  108. echo " Model Source: ${PADDLE_PDX_MODEL_SOURCE:-default}"
  109. echo " PID File: $PIDFILE"
  110. echo " Log File: $LOGFILE"
  111. if [ -f "$PIPELINE_CONFIG" ]; then
  112. echo "✅ Pipeline config file exists"
  113. else
  114. echo "❌ Pipeline config file not found"
  115. fi
  116. }
  117. # 显示使用帮助
  118. usage() {
  119. echo "PaddleX PP-StructureV3 Service Daemon"
  120. echo "======================================"
  121. echo "Usage: $0 {start|stop|restart|status|logs|test|config}"
  122. echo ""
  123. echo "Commands:"
  124. echo " start - Start the PaddleX service"
  125. echo " stop - Stop the PaddleX service"
  126. echo " restart - Restart the PaddleX service"
  127. echo " status - Show service status"
  128. echo " logs - Show service logs (follow mode)"
  129. echo " config - Show current configuration"
  130. echo ""
  131. echo "Configuration (edit script to modify):"
  132. echo " Port: $PORT"
  133. echo " Device: $DEVICE"
  134. echo " Pipeline: $PIPELINE_CONFIG"
  135. echo ""
  136. echo "Examples:"
  137. echo " ./ppstructure_v3_daemon.sh start"
  138. echo " ./ppstructure_v3_daemon.sh status"
  139. echo " ./ppstructure_v3_daemon.sh logs"
  140. }
  141. case "$1" in
  142. start)
  143. start
  144. ;;
  145. stop)
  146. stop
  147. ;;
  148. restart)
  149. stop
  150. sleep 3
  151. start
  152. ;;
  153. status)
  154. status
  155. ;;
  156. logs)
  157. logs
  158. ;;
  159. config)
  160. config
  161. ;;
  162. *)
  163. usage
  164. exit 1
  165. ;;
  166. esac