safesight-edge/scripts/systemd/Mannual.md

6.5 KiB
Raw Blame History

RK3588 Media Server Systemd 集成

本目录包含 RK3588 Media Server 和 Agent 的 systemd 服务配置和管理脚本。

概述

服务 描述 默认端口
media-server C++ 媒体服务器(视频流处理) 9000 (HTTP), 8554/8555 (RTSP)
rk3588-agent Go 管理代理HTTP API 9100

快速开始

方法一:快速设置(推荐用于开发板)

如果你已经在 Orange Pi 上编译好项目,直接运行:

cd /path/to/OrangePi3588Media
sudo ./scripts/systemd/quick-setup.sh

此脚本会自动:

  1. 检查并编译项目(如需要)
  2. 安装 systemd 服务
  3. 启动服务
  4. 显示访问地址

方法二:手动安装

cd /path/to/OrangePi3588Media

# 安装服务
sudo ./scripts/systemd/install-systemd.sh

# 或指定自定义路径
sudo ./scripts/systemd/install-systemd.sh \
    --media-bin ./build/media-server \
    --media-config ./configs/sample_cam1.json \
    --agent-bin ./agent/rk3588-agent_linux_arm64 \
    --agent-config ./agent/agent_cam1.config.json

方法三:手动步骤(了解细节)

# 1. 复制服务文件
sudo cp scripts/systemd/media-server.service /etc/systemd/system/
sudo cp scripts/systemd/rk3588-agent.service /etc/systemd/system/

# 2. 创建安装目录并复制文件
sudo mkdir -p /opt/rk3588-media-server/{bin,lib,etc,logs}
sudo cp build/media-server /opt/rk3588-media-server/bin/
sudo cp configs/sample_cam1.json /opt/rk3588-media-server/etc/media-server.json

sudo mkdir -p /opt/rk3588-agent
sudo cp agent/rk3588-agent_linux_arm64 /opt/rk3588-agent/rk3588-agent
sudo cp agent/agent_cam1.config.json /opt/rk3588-agent/agent.config.json

# 3. 重载 systemd
sudo systemctl daemon-reload

# 4. 启动并启用服务
sudo systemctl enable --now media-server
sudo systemctl enable --now rk3588-agent

服务管理

查看状态

# 使用便捷脚本
./scripts/systemd/status.sh

# 或手动查看
sudo systemctl status media-server
sudo systemctl status rk3588-agent

# 查看 NPU 负载
sudo watch -n 1 cat /sys/kernel/debug/rknpu/load

启动/停止/重启

# Media Server
sudo systemctl start media-server
sudo systemctl stop media-server
sudo systemctl restart media-server

# Agent
sudo systemctl start rk3588-agent
sudo systemctl stop rk3588-agent
sudo systemctl restart rk3588-agent

# 同时重启两者
sudo systemctl restart media-server rk3588-agent

开机自启

# 启用开机自启
sudo systemctl enable media-server
sudo systemctl enable rk3588-agent

# 禁用开机自启
sudo systemctl disable media-server
sudo systemctl disable rk3588-agent

查看日志

# 实时跟踪日志
sudo journalctl -u media-server -f
sudo journalctl -u rk3588-agent -f

# 查看最近 100 行
sudo journalctl -u media-server -n 100 --no-pager

# 查看今天的日志
sudo journalctl -u media-server --since today

# 按时间范围查看
sudo journalctl -u media-server --since "2024-01-01 10:00:00" --until "2024-01-01 12:00:00"

配置文件

Media Server

位置: /opt/rk3588-media-server/etc/media-server.json

# 编辑配置
sudo nano /opt/rk3588-media-server/etc/media-server.json

# 验证 JSON 格式
python3 -m json.tool /opt/rk3588-media-server/etc/media-server.json

# 重启生效
sudo systemctl restart media-server

Agent

位置: /opt/rk3588-agent/agent.config.json

sudo nano /opt/rk3588-agent/agent.config.json
sudo systemctl restart rk3588-agent

卸载

# 使用卸载脚本(保留配置备份)
sudo ./scripts/systemd/uninstall-systemd.sh

# 或手动卸载
sudo systemctl stop media-server rk3588-agent
sudo systemctl disable media-server rk3588-agent
sudo rm -f /etc/systemd/system/media-server.service
sudo rm -f /etc/systemd/system/rk3588-agent.service
sudo systemctl daemon-reload
# 然后手动删除 /opt/rk3588-media-server/ 和 /opt/rk3588-agent/

故障排查

服务无法启动

# 1. 查看详细错误信息
sudo journalctl -u media-server -n 50 --no-pager

# 2. 检查配置文件
sudo /opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json --version

# 3. 检查端口占用
sudo ss -tlnp | grep -E '(9000|8554|8555|9100)'

# 4. 检查权限
ls -la /opt/rk3588-media-server/bin/media-server

端口冲突

如果 9000/8554/8555 端口被占用,修改配置文件:

// media-server.json
{
  "http": {
    "port": 9001  // 修改为其他端口
  },
  "rtsp": {
    "port": 8556  // 修改为其他端口
  }
}

NPU 相关问题

# 检查 NPU 驱动
cat /sys/kernel/debug/rknpu/version

# 检查 NPU 负载
watch -n 1 cat /sys/kernel/debug/rknpu/load

# 检查设备节点
ls -la /dev/rknpu*

文件说明

scripts/systemd/
├── README.md                 # 本文件
├── media-server.service      # Media Server systemd 服务文件
├── rk3588-agent.service      # Agent systemd 服务文件
├── install-systemd.sh        # 安装脚本
├── uninstall-systemd.sh      # 卸载脚本
├── status.sh                 # 状态查看脚本
└── quick-setup.sh            # 快速设置脚本(一键部署)

服务文件详解

media-server.service

[Unit]
Description=RK3588 Media Server
After=network-online.target

[Service]
Type=simple
User=root
ExecStart=/opt/rk3588-media-server/bin/media-server --config /opt/rk3588-media-server/etc/media-server.json
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

关键配置:

  • Restart=on-failure: 崩溃后自动重启
  • LimitNOFILE=65535: 增加文件描述符限制(视频流需要)
  • After=network-online.target: 确保网络就绪后启动

rk3588-agent.service

[Unit]
Description=RK3588 Agent
After=media-server.service  # 可选:确保 media-server 先启动

[Service]
Type=simple
ExecStart=/opt/rk3588-agent/rk3588-agent --config /opt/rk3588-agent/agent.config.json
Restart=always
RestartSec=2

注意事项

  1. 首次启动: 确保配置文件路径正确,特别是模型路径和摄像头配置
  2. 权限: 服务以 root 运行,需要访问 /dev/rknpu 设备
  3. 依赖: Agent 可选依赖 media-server可根据需要调整 After=Requires=
  4. 日志: 使用 journalctl 查看日志,日志大小由 systemd 管理

参考