ppstructure_v3_daemon.sh 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. CUDA_VISIBLE_DEVICES=7
  11. SCRIPT_DIR="/home/ubuntu/zhch/PaddleX/zhch"
  12. # PIPELINE_CONFIG="$SCRIPT_DIR/my_config/PP-StructureV3.yaml"
  13. PIPELINE_CONFIG="$SCRIPT_DIR/my_config/PP-StructureV3-RT-DETR-H_layout_17cls.yaml"
  14. # 正确初始化和激活conda环境
  15. # 方法1:使用conda.sh脚本初始化
  16. if [ -f "/home/ubuntu/anaconda3/etc/profile.d/conda.sh" ]; then
  17. source /home/ubuntu/anaconda3/etc/profile.d/conda.sh
  18. conda activate $CONDA_ENV
  19. elif [ -f "/opt/conda/etc/profile.d/conda.sh" ]; then
  20. source /opt/conda/etc/profile.d/conda.sh
  21. conda activate $CONDA_ENV
  22. else
  23. # 方法2:直接使用conda可执行文件路径
  24. echo "Warning: Using direct conda path activation"
  25. export PATH="/home/ubuntu/anaconda3/envs/$CONDA_ENV/bin:$PATH"
  26. fi
  27. # 设置模型下载源(可选)
  28. export PADDLE_PDX_MODEL_SOURCE="bos"
  29. export PADDLEX_ENABLE_TABLE_ADAPTER="true"
  30. export PYTHONWARNINGS="ignore::UserWarning"
  31. start() {
  32. if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
  33. echo "PaddleX PP-StructureV3 is already running"
  34. return 1
  35. fi
  36. echo "Starting PaddleX PP-StructureV3 daemon..."
  37. echo "Port: $PORT, Device: $DEVICE"
  38. echo "Pipeline config: $PIPELINE_CONFIG"
  39. # 检查配置文件是否存在
  40. if [ ! -f "$PIPELINE_CONFIG" ]; then
  41. echo "❌ Pipeline config file not found: $PIPELINE_CONFIG"
  42. return 1
  43. fi
  44. # 检查conda环境
  45. if ! command -v python >/dev/null 2>&1; then
  46. echo "❌ Python not found. Check conda environment activation."
  47. return 1
  48. fi
  49. # 检查paddlex命令
  50. if ! command -v paddlex >/dev/null 2>&1; then
  51. echo "❌ PaddleX not found. Check installation and environment."
  52. return 1
  53. fi
  54. echo "🔧 Using Python: $(which python)"
  55. echo "🔧 Using PaddleX: $(which paddlex)"
  56. echo " CUDA Devices: $CUDA_VISIBLE_DEVICES"
  57. # 启动PaddleX服务
  58. cd $SCRIPT_DIR || exit 1
  59. nohup $CUDA_VISIBLE_DEVICES; python3 start_paddlex_with_adapter.py --serve \
  60. --port $PORT \
  61. --device "gpu" \
  62. --pipeline "$PIPELINE_CONFIG" \
  63. > $LOGFILE 2>&1 &
  64. echo $! > $PIDFILE
  65. echo "✅ PaddleX PP-StructureV3 started with PID: $(cat $PIDFILE)"
  66. echo "📋 Log file: $LOGFILE"
  67. echo "🌐 Service URL: http://localhost:$PORT"
  68. echo "📖 API Documentation: http://localhost:$PORT/docs"
  69. }
  70. stop() {
  71. if [ ! -f $PIDFILE ]; then
  72. echo "PaddleX PP-StructureV3 is not running"
  73. return 1
  74. fi
  75. PID=$(cat $PIDFILE)
  76. echo "Stopping PaddleX PP-StructureV3 (PID: $PID)..."
  77. # 优雅停止
  78. kill $PID
  79. # 等待进程结束
  80. for i in {1..10}; do
  81. if ! kill -0 $PID 2>/dev/null; then
  82. break
  83. fi
  84. echo "Waiting for process to stop... ($i/10)"
  85. sleep 1
  86. done
  87. # 如果进程仍在运行,强制结束
  88. if kill -0 $PID 2>/dev/null; then
  89. echo "Force killing process..."
  90. kill -9 $PID
  91. fi
  92. rm -f $PIDFILE
  93. echo "✅ PaddleX PP-StructureV3 stopped"
  94. }
  95. status() {
  96. if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then
  97. PID=$(cat $PIDFILE)
  98. echo "✅ PaddleX PP-StructureV3 is running (PID: $PID)"
  99. echo "🌐 Service URL: http://localhost:$PORT"
  100. echo "📋 Log file: $LOGFILE"
  101. # 检查端口是否被监听
  102. if command -v netstat >/dev/null 2>&1; then
  103. if netstat -tuln | grep -q ":$PORT "; then
  104. echo "🔗 Port $PORT is being listened"
  105. else
  106. echo "⚠️ Port $PORT is not being listened (service may be starting up)"
  107. fi
  108. fi
  109. # 显示最新日志
  110. if [ -f $LOGFILE ]; then
  111. echo "📄 Latest logs (last 5 lines):"
  112. tail -5 $LOGFILE
  113. fi
  114. else
  115. echo "❌ PaddleX PP-StructureV3 is not running"
  116. if [ -f $PIDFILE ]; then
  117. echo "Removing stale PID file..."
  118. rm -f $PIDFILE
  119. fi
  120. fi
  121. }
  122. logs() {
  123. if [ -f $LOGFILE ]; then
  124. echo "📄 PaddleX PP-StructureV3 logs:"
  125. echo "=================="
  126. tail -f $LOGFILE
  127. else
  128. echo "❌ Log file not found: $LOGFILE"
  129. fi
  130. }
  131. config() {
  132. echo "📋 Current configuration:"
  133. echo " Conda Environment: $CONDA_ENV"
  134. echo " Port: $PORT"
  135. echo " Device: $DEVICE"
  136. echo " Pipeline Config: $PIPELINE_CONFIG"
  137. echo " Model Source: ${PADDLE_PDX_MODEL_SOURCE:-default}"
  138. echo " PID File: $PIDFILE"
  139. echo " Log File: $LOGFILE"
  140. if [ -f "$PIPELINE_CONFIG" ]; then
  141. echo "✅ Pipeline config file exists"
  142. else
  143. echo "❌ Pipeline config file not found"
  144. fi
  145. # 显示环境信息
  146. echo ""
  147. echo "🔧 Environment:"
  148. echo " Python: $(which python 2>/dev/null || echo 'Not found')"
  149. echo " PaddleX: $(which paddlex 2>/dev/null || echo 'Not found')"
  150. echo " Conda: $(which conda 2>/dev/null || echo 'Not found')"
  151. }
  152. # 显示使用帮助
  153. usage() {
  154. echo "PaddleX PP-StructureV3 Service Daemon"
  155. echo "======================================"
  156. echo "Usage: $0 {start|stop|restart|status|logs|config}"
  157. echo ""
  158. echo "Commands:"
  159. echo " start - Start the PaddleX service"
  160. echo " stop - Stop the PaddleX service"
  161. echo " restart - Restart the PaddleX service"
  162. echo " status - Show service status"
  163. echo " logs - Show service logs (follow mode)"
  164. echo " config - Show current configuration"
  165. echo ""
  166. echo "Configuration (edit script to modify):"
  167. echo " Port: $PORT"
  168. echo " Device: $DEVICE"
  169. echo " Pipeline: $PIPELINE_CONFIG"
  170. echo ""
  171. echo "Examples:"
  172. echo " ./ppstructure_v3_daemon.sh start"
  173. echo " ./ppstructure_v3_daemon.sh status"
  174. echo " ./ppstructure_v3_daemon.sh logs"
  175. }
  176. case "$1" in
  177. start)
  178. start
  179. ;;
  180. stop)
  181. stop
  182. ;;
  183. restart)
  184. stop
  185. sleep 3
  186. start
  187. ;;
  188. status)
  189. status
  190. ;;
  191. logs)
  192. logs
  193. ;;
  194. config)
  195. config
  196. ;;
  197. *)
  198. usage
  199. exit 1
  200. ;;
  201. esac