service.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #!/bin/bash
  2. # DSH 双摄系统服务管理脚本
  3. # 用法: ./service.sh start|stop|restart|status
  4. SERVICE_NAME="dsh-dual-camera"
  5. PROJECT_DIR="/home/admin/dsh/dual_camera_system"
  6. PID_FILE="/tmp/${SERVICE_NAME}.pid"
  7. LOG_FILE="${PROJECT_DIR}/logs/${SERVICE_NAME}.log"
  8. # 激活 conda 环境
  9. source /home/admin/miniconda3/etc/profile.d/conda.sh
  10. conda activate rknn
  11. # 确保日志目录存在
  12. mkdir -p "${PROJECT_DIR}/logs"
  13. # 创建日志文件(如果不存在)
  14. touch "$LOG_FILE"
  15. start() {
  16. if [ -f "$PID_FILE" ]; then
  17. PID=$(cat "$PID_FILE")
  18. if ps -p "$PID" > /dev/null 2>&1; then
  19. echo "服务已在运行中 (PID: $PID)"
  20. return 1
  21. fi
  22. rm -f "$PID_FILE"
  23. fi
  24. echo "启动 DSH 双摄系统服务..."
  25. cd "$PROJECT_DIR"
  26. nohup python main.py --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 &
  27. echo $! > "$PID_FILE"
  28. sleep 2
  29. if ps -p $(cat "$PID_FILE") > /dev/null 2>&1; then
  30. echo "服务已启动 (PID: $(cat $PID_FILE))"
  31. else
  32. echo "服务启动失败,请检查日志: $LOG_FILE"
  33. rm -f "$PID_FILE"
  34. return 1
  35. fi
  36. }
  37. stop() {
  38. if [ ! -f "$PID_FILE" ]; then
  39. echo "服务未运行"
  40. return 0
  41. fi
  42. PID=$(cat "$PID_FILE")
  43. if ! ps -p "$PID" > /dev/null 2>&1; then
  44. echo "服务未运行 ( stale PID file: $PID )"
  45. rm -f "$PID_FILE"
  46. return 0
  47. fi
  48. echo "停止服务 (PID: $PID)..."
  49. kill "$PID"
  50. # 等待进程结束
  51. for i in {1..10}; do
  52. if ! ps -p "$PID" > /dev/null 2>&1; then
  53. echo "服务已停止"
  54. rm -f "$PID_FILE"
  55. return 0
  56. fi
  57. sleep 1
  58. done
  59. # 强制杀死
  60. echo "强制终止进程..."
  61. kill -9 "$PID" 2>/dev/null
  62. rm -f "$PID_FILE"
  63. echo "服务已停止"
  64. }
  65. restart() {
  66. stop
  67. sleep 2
  68. start
  69. }
  70. status() {
  71. if [ ! -f "$PID_FILE" ]; then
  72. echo "服务状态: 未运行"
  73. return 0
  74. fi
  75. PID=$(cat "$PID_FILE")
  76. if ps -p "$PID" > /dev/null 2>&1; then
  77. echo "服务状态: 运行中 (PID: $PID)"
  78. return 0
  79. else
  80. echo "服务状态: 未运行 (stale PID file)"
  81. rm -f "$PID_FILE"
  82. return 1
  83. fi
  84. }
  85. case "$1" in
  86. start)
  87. start
  88. ;;
  89. stop)
  90. stop
  91. ;;
  92. restart)
  93. restart
  94. ;;
  95. status)
  96. status
  97. ;;
  98. *)
  99. echo "用法: $0 {start|stop|restart|status}"
  100. exit 1
  101. ;;
  102. esac
  103. exit 0