diff --git a/docs/deployment.md b/docs/deployment.md index d3e8753..dd82fff 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -28,16 +28,15 @@ cd ~/apps/OrangePi3588Media sudo ./scripts/manage.sh install ``` -安装过程会提示: -- **运行模式**: - - `独立模式` - Media Server 由 systemd 直接管理 - - `Agent 模式` - Media Server 由 Agent 管理(推荐,支持 Web 界面) +安装过程会提示选择**配置文件**: - **配置文件**: - `test_cam1_face_det_rtsp_server.json` - 人脸检测(推荐) - `sample_cam1_native_rtsp_face.json` - 完整功能 - `test_cam1_face_det_recog_rtsp_server.json` - 人脸识别 - `sample_cam1.json` - 完整功能(需手动修复) +Media Server 由 Agent 统一管理,可通过 Web 界面 `http://<设备IP>:9100` 查看状态和控制服务。 + ### 3. 查看状态 ```bash @@ -89,30 +88,15 @@ sudo ./scripts/manage.sh install ## 管理命令 -### 独立模式 +Agent 统一管理 Media Server,使用以下命令: ```bash -# 启动/停止/重启 -sudo systemctl start media-server -sudo systemctl stop media-server -sudo systemctl restart media-server - -# 查看状态 -sudo systemctl status media-server - -# 查看日志 -sudo journalctl -u media-server -f -``` - -### Agent 模式 - -```bash -# 启动/停止/重启 +# 启动/停止/重启 Agent(同时会启动/停止 Media Server) sudo systemctl start rk3588-agent sudo systemctl stop rk3588-agent sudo systemctl restart rk3588-agent -# 查看状态 +# 查看 Agent 状态 sudo systemctl status rk3588-agent # 查看日志 diff --git a/scripts/manage.sh b/scripts/manage.sh index 8942789..c2b68f1 100755 --- a/scripts/manage.sh +++ b/scripts/manage.sh @@ -1,6 +1,6 @@ #!/bin/bash # RK3588 Media Server + Agent 统一管理脚本 -# 用法: sudo ./install.sh [install|status|uninstall] +# 用法: sudo ./manage.sh [install|status|uninstall] set -e @@ -35,12 +35,12 @@ cmd_install() { echo "Agent 安装目录: $AGENT_INSTALL_DIR" echo "" - # 检查编译产物 + # 检查 Media Server 编译产物 if [ ! -f "$BUILD_DIR/media-server" ]; then echo -e "${RED}错误: 未找到编译好的 media-server${NC}" echo "请先编译项目:" echo " cd $PROJECT_DIR" - echo " cmake -S . -B build -DCMAKE_BUILD_TYPE=Release ..." + echo " cmake -S . -B build -DCMAKE_BUILD_TYPE=Release" echo " cmake --build build -j\$(nproc)" exit 1 fi @@ -53,7 +53,7 @@ cmd_install() { [[ ! $REPLY =~ ^[Yy]$ ]] && exit 1 fi - # 检查 agent + # 检查 Agent 编译产物(强制要求) AGENT_SOURCE="" if [ -f "$PROJECT_DIR/agent/rk3588-agent_linux_arm64" ]; then AGENT_SOURCE="$PROJECT_DIR/agent/rk3588-agent_linux_arm64" @@ -62,31 +62,16 @@ cmd_install() { fi if [ -z "$AGENT_SOURCE" ]; then - echo -e "${YELLOW}警告: 未找到编译好的 rk3588-agent${NC}" - echo " 如需 Agent 功能,请先编译:" - echo " cd $PROJECT_DIR/agent" - echo " GOOS=linux GOARCH=arm64 go build -o rk3588-agent_linux_arm64 ./cmd" + echo -e "${RED}错误: 未找到编译好的 rk3588-agent${NC}" + echo "请先编译 Agent:" + echo " cd $PROJECT_DIR/agent" + echo " GOOS=linux GOARCH=arm64 go build -o rk3588-agent_linux_arm64 ./cmd" + exit 1 fi echo -e "${GREEN}✓${NC} 编译产物检查通过" echo "" - # 选择模式 - echo "请选择运行模式:" - echo " 1) 独立模式 - Media Server 由 systemd 直接管理 (简单)" - echo " 2) Agent 模式 - Media Server 由 Agent 管理 (推荐,支持 Web 管理)" - echo "" - read -p "请输入选项 [1-2,默认2]: " mode_choice - mode_choice=${mode_choice:-2} - - USE_AGENT=false - if [ "$mode_choice" = "2" ] && [ -n "$AGENT_SOURCE" ]; then - USE_AGENT=true - elif [ "$mode_choice" = "2" ] && [ -z "$AGENT_SOURCE" ]; then - echo -e "${YELLOW}Agent 未编译,使用独立模式${NC}" - fi - echo "" - # 选择配置文件 echo "请选择配置文件:" echo " 1) test_cam1_face_det_rtsp_server.json (人脸检测)" @@ -105,12 +90,10 @@ cmd_install() { *) CONFIG_FILE="$PROJECT_DIR/configs/test_cam1_face_det_rtsp_server.json" ;; esac - echo "" - echo -e "运行模式: ${GREEN}$([ "$USE_AGENT" = true ] && echo "Agent 模式" || echo "独立模式")${NC}" echo "" # 安装 Media Server - echo -e "${YELLOW}[1/4] 安装 Media Server...${NC}" + echo -e "${YELLOW}[1/3] 安装 Media Server...${NC}" rm -rf "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"/{bin/plugins,lib,etc,logs,models,web/hls} @@ -135,11 +118,11 @@ cmd_install() { # 处理配置 cp "$CONFIG_FILE" "$INSTALL_DIR/etc/media-server.json" - python3 << EOF + python3 << 'EOF' import json, os -config_file = "$INSTALL_DIR/etc/media-server.json" -install_dir = "$INSTALL_DIR" -project_dir = "$PROJECT_DIR" +config_file = "/opt/rk3588-media-server/etc/media-server.json" +install_dir = "/opt/rk3588-media-server" +project_dir = os.path.expanduser("~/apps/OrangePi3588Media") def fix_path(path): if not path or not isinstance(path, str): @@ -188,16 +171,15 @@ EOF echo -e "${GREEN}✓${NC} Media Server 安装完成" # 安装 Agent - if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then - echo -e "${YELLOW}[2/4] 安装 Agent...${NC}" - rm -rf "$AGENT_INSTALL_DIR" - mkdir -p "$AGENT_INSTALL_DIR" - mkdir -p "/var/lib/rk3588-agent" - - cp "$AGENT_SOURCE" "$AGENT_INSTALL_DIR/rk3588-agent" - chmod +x "$AGENT_INSTALL_DIR/rk3588-agent" - - cat > "$AGENT_INSTALL_DIR/agent.config.json" << 'AGENT_CONFIG' + echo -e "${YELLOW}[2/3] 安装 Agent...${NC}" + rm -rf "$AGENT_INSTALL_DIR" + mkdir -p "$AGENT_INSTALL_DIR" + mkdir -p "/var/lib/rk3588-agent" + + cp "$AGENT_SOURCE" "$AGENT_INSTALL_DIR/rk3588-agent" + chmod +x "$AGENT_INSTALL_DIR/rk3588-agent" + + cat > "$AGENT_INSTALL_DIR/agent.config.json" << 'AGENT_CONFIG' { "agent": { "listen": "0.0.0.0:9100", @@ -224,35 +206,14 @@ EOF } } AGENT_CONFIG - chown -R orangepi:orangepi "/var/lib/rk3588-agent" - chmod 755 "$AGENT_INSTALL_DIR" - echo -e "${GREEN}✓${NC} Agent 安装完成" - fi + chown -R orangepi:orangepi "/var/lib/rk3588-agent" + chmod 755 "$AGENT_INSTALL_DIR" + echo -e "${GREEN}✓${NC} Agent 安装完成" # 安装服务 - echo -e "${YELLOW}[3/4] 安装 Systemd 服务...${NC}" + echo -e "${YELLOW}[3/3] 安装 Systemd 服务...${NC}" - cat > "$SERVICE_DIR/media-server.service" << 'EOF' -[Unit] -Description=RK3588 Media Server -After=network.target - -[Service] -Type=simple -User=root -WorkingDirectory=/opt/rk3588-media-server -ExecStart=/opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json -Restart=always -RestartSec=5 -StandardOutput=journal -StandardError=journal - -[Install] -WantedBy=multi-user.target -EOF - - if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then - cat > "$SERVICE_DIR/rk3588-agent.service" << 'EOF' + cat > "$SERVICE_DIR/rk3588-agent.service" << 'EOF' [Unit] Description=RK3588 Agent Service After=network.target @@ -270,24 +231,15 @@ StandardError=journal [Install] WantedBy=multi-user.target EOF - fi systemctl daemon-reload touch /var/run/rk3588sys-media-server.pid chmod 666 /var/run/rk3588sys-media-server.pid - echo -e "${GREEN}✓${NC} 服务安装完成" - - # 启动服务 - echo -e "${YELLOW}[4/4] 启动服务...${NC}" - if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then - systemctl disable media-server 2>/dev/null || true - systemctl stop media-server 2>/dev/null || true - systemctl enable rk3588-agent - systemctl start rk3588-agent - else - systemctl enable media-server - systemctl start media-server - fi + + # 启动 Agent(Agent 会自动管理 Media Server) + systemctl enable rk3588-agent + systemctl start rk3588-agent + echo -e "${GREEN}✓${NC} 服务已启动" # 完成 @@ -296,16 +248,10 @@ EOF echo -e "${GREEN}║ 安装完成! ║${NC}" echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}" echo "" - if [ "$USE_AGENT" = true ] && [ -n "$AGENT_SOURCE" ]; then - echo "管理命令:" - echo " 状态: sudo $0 status" - echo " 日志: sudo journalctl -u rk3588-agent -f" - echo " 界面: http://<设备IP>:9100" - else - echo "管理命令:" - echo " 状态: sudo $0 status" - echo " 日志: sudo journalctl -u media-server -f" - fi + echo "管理命令:" + echo " 状态: sudo ./manage.sh status" + echo " 日志: sudo journalctl -u rk3588-agent -f" + echo " 界面: http://<设备IP>:9100" } cmd_status() { @@ -325,15 +271,29 @@ cmd_status() { fi echo "" - echo -e "${YELLOW}[Media Server]${NC}" - if systemctl is-active --quiet media-server 2>/dev/null; then + echo -e "${YELLOW}[RK3588 Agent]${NC}" + if systemctl is-active --quiet rk3588-agent 2>/dev/null; then echo -e " 状态: ${GREEN}● 运行中${NC}" - PID=$(systemctl show --property=MainPID --value media-server 2>/dev/null) - echo " PID: $PID" + PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null) if [ -n "$PID" ] && [ "$PID" != "0" ]; then CPU_MEM=$(ps -p $PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A") echo " CPU/MEM: $CPU_MEM" fi + echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100" + else + echo -e " 状态: ${RED}○ 停止${NC}" + fi + echo "" + + echo -e "${YELLOW}[Media Server]${NC}" + # 检查 Media Server 是否由 Agent 启动 + AGENT_PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null) + MS_PID=$(pgrep -f "media-server" | head -1) + if [ -n "$MS_PID" ]; then + echo -e " 状态: ${GREEN}● 运行中${NC}" + echo " PID: $MS_PID" + CPU_MEM=$(ps -p $MS_PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A") + echo " CPU/MEM: $CPU_MEM" echo " 端口:" ss -tlnp 2>/dev/null | grep -E "(9000|8554|8555)" | head -3 | sed 's/^/ /' else @@ -341,33 +301,13 @@ cmd_status() { fi echo "" - if systemctl list-unit-files 2>/dev/null | grep -q rk3588-agent; then - echo -e "${YELLOW}[RK3588 Agent]${NC}" - if systemctl is-active --quiet rk3588-agent 2>/dev/null; then - echo -e " 状态: ${GREEN}● 运行中${NC}" - PID=$(systemctl show --property=MainPID --value rk3588-agent 2>/dev/null) - if [ -n "$PID" ] && [ "$PID" != "0" ]; then - CPU_MEM=$(ps -p $PID -o %cpu,%mem --no-headers 2>/dev/null || echo "N/A") - echo " CPU/MEM: $CPU_MEM" - fi - echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100" - else - echo -e " 状态: ${RED}○ 停止${NC}" - fi - echo "" - fi - echo -e "${YELLOW}[最近日志]${NC}" - if systemctl is-active --quiet rk3588-agent 2>/dev/null; then - journalctl -u rk3588-agent --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志" - else - journalctl -u media-server --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志" - fi + journalctl -u rk3588-agent --no-pager -n 5 2>/dev/null | tail -5 || echo " 无日志" echo "" echo "常用命令:" - echo " 重启: sudo systemctl restart media-server|rk3588-agent" - echo " 日志: sudo journalctl -u media-server|rk3588-agent -f" + echo " 重启: sudo systemctl restart rk3588-agent" + echo " 日志: sudo journalctl -u rk3588-agent -f" echo " 配置: sudo nano /opt/rk3588-media-server/etc/media-server.json" } @@ -385,12 +325,11 @@ cmd_uninstall() { [[ ! $REPLY =~ ^[Yy]$ ]] && echo "已取消" && exit 0 echo "[1/3] 停止服务..." - systemctl stop media-server rk3588-agent 2>/dev/null || true - systemctl disable media-server rk3588-agent 2>/dev/null || true + systemctl stop rk3588-agent 2>/dev/null || true + systemctl disable rk3588-agent 2>/dev/null || true echo -e "${GREEN}✓${NC} 服务已停止" echo "[2/3] 删除服务文件..." - rm -f "$SERVICE_DIR/media-server.service" rm -f "$SERVICE_DIR/rk3588-agent.service" systemctl daemon-reload echo -e "${GREEN}✓${NC} 服务文件已删除" @@ -431,7 +370,7 @@ case "${1:-install}" in echo "用法: sudo ./manage.sh [install|status|uninstall]" echo "" echo "命令:" - echo " install - 安装/更新 Media Server 和 Agent (默认)" + echo " install - 安装 Media Server 和 Agent (默认)" echo " status - 查看运行状态" echo " uninstall - 卸载服务" exit 1 diff --git a/scripts/systemd/media-server.service b/scripts/systemd/media-server.service deleted file mode 100644 index 37027c8..0000000 --- a/scripts/systemd/media-server.service +++ /dev/null @@ -1,34 +0,0 @@ -[Unit] -Description=RK3588 Media Server -Documentation=https://github.com/your-org/OrangePi3588Media -After=network-online.target -Wants=network-online.target - -[Service] -Type=simple -User=root -Group=root -WorkingDirectory=/opt/rk3588-media-server -Environment="LD_LIBRARY_PATH=/opt/rk3588-media-server/lib:/opt/rk3588-media-server/bin/plugins:%LD_LIBRARY_PATH" -Environment="RKNN_LOG_LEVEL=2" -ExecStart=/opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json -ExecReload=/bin/kill -HUP $MAINPID -KillMode=mixed -KillSignal=SIGTERM -TimeoutStopSec=30 -Restart=on-failure -RestartSec=5 -StartLimitInterval=60s -StartLimitBurst=3 - -# 资源限制 -LimitNOFILE=65535 -LimitNPROC=4096 - -# 日志输出 -StandardOutput=journal -StandardError=journal -SyslogIdentifier=media-server - -[Install] -WantedBy=multi-user.target