#!/bin/bash # DSH 双摄系统服务管理脚本 # 用法: ./service.sh start|stop|restart|status SERVICE_NAME="dsh-dual-camera" PROJECT_DIR="/home/admin/dsh/dual_camera_system" PID_FILE="/tmp/${SERVICE_NAME}.pid" LOG_FILE="${PROJECT_DIR}/logs/${SERVICE_NAME}.log" # 激活 conda 环境 source /home/admin/miniconda3/etc/profile.d/conda.sh conda activate rknn # 确保日志目录存在 mkdir -p "${PROJECT_DIR}/logs" # 创建日志文件(如果不存在) touch "$LOG_FILE" start() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "服务已在运行中 (PID: $PID)" return 1 fi rm -f "$PID_FILE" fi echo "启动 DSH 双摄系统服务..." cd "$PROJECT_DIR" nohup python main.py --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" sleep 2 if ps -p $(cat "$PID_FILE") > /dev/null 2>&1; then echo "服务已启动 (PID: $(cat $PID_FILE))" else echo "服务启动失败,请检查日志: $LOG_FILE" rm -f "$PID_FILE" return 1 fi } stop() { if [ ! -f "$PID_FILE" ]; then echo "服务未运行" return 0 fi PID=$(cat "$PID_FILE") if ! ps -p "$PID" > /dev/null 2>&1; then echo "服务未运行 ( stale PID file: $PID )" rm -f "$PID_FILE" return 0 fi echo "停止服务 (PID: $PID)..." kill "$PID" # 等待进程结束 for i in {1..10}; do if ! ps -p "$PID" > /dev/null 2>&1; then echo "服务已停止" rm -f "$PID_FILE" return 0 fi sleep 1 done # 强制杀死 echo "强制终止进程..." kill -9 "$PID" 2>/dev/null rm -f "$PID_FILE" echo "服务已停止" } restart() { stop sleep 2 start } status() { if [ ! -f "$PID_FILE" ]; then echo "服务状态: 未运行" return 0 fi PID=$(cat "$PID_FILE") if ps -p "$PID" > /dev/null 2>&1; then echo "服务状态: 运行中 (PID: $PID)" return 0 else echo "服务状态: 未运行 (stale PID file)" rm -f "$PID_FILE" return 1 fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "用法: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0