仓库结构: edge/ 设备端(原根目录设备端代码整体移入) control/ 管理端(清理后) docs/ 文档(PRD 移入 design/) README.md 根导航(新增) 清理: - control/.brainstorm 临时草稿删除 - control 根级重复文档(API表/PRD_04)并入 docs/design/ - control/plan.md -> docs/implementation/control-plan.md - control/safesightd-linux-arm64 二进制取消版本控制(.gitignore) - edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore) - Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突) 更新: - 根 README.md 导航、docs/README.md 文档索引 - deployment.md/检查表路径加 edge/ 前缀 - .gitignore 重写(edge/control 分区规则)
223 lines
6.1 KiB
Bash
Executable File
223 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# RK3588 Edge Server 运维脚本
|
|
# 安装后位于 /opt/safesight-edge-server/script/ops.sh
|
|
#
|
|
# 用法: sudo ./ops.sh [status|start|stop|restart|logs|hw|ddr-status|ddr-performance|ddr-ondemand|ddr-restore|overlay-status|overlay-disable|overlay-enable|overlay-verify]
|
|
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# 服务名称
|
|
MEDIA_SERVICE="safesight-edge-server"
|
|
AGENT_SERVICE="safesight-edge-agent"
|
|
|
|
cmd_status() {
|
|
echo -e "${BLUE}========== RK3588 Edge Server 状态 ==========${NC}"
|
|
echo ""
|
|
|
|
# 系统信息
|
|
echo -e "${CYAN}[系统信息]${NC}"
|
|
echo " 时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo " 运行时间: $(uptime -p 2>/dev/null || uptime | awk -F',' '{print $1}')"
|
|
echo ""
|
|
|
|
# NPU
|
|
echo -e "${CYAN}[NPU 负载]${NC}"
|
|
if [ -f /proc/rknpu/load ]; then
|
|
cat /proc/rknpu/load | sed 's/^/ /'
|
|
else
|
|
echo " NPU 信息不可用"
|
|
fi
|
|
echo ""
|
|
|
|
# Edge Server
|
|
echo -e "${CYAN}[Edge Server]${NC}"
|
|
if systemctl is-active --quiet $MEDIA_SERVICE 2>/dev/null; then
|
|
echo -e " 状态: ${GREEN}● 运行中${NC}"
|
|
PID=$(systemctl show --property=MainPID --value $MEDIA_SERVICE 2>/dev/null)
|
|
echo " PID: $PID"
|
|
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 " 端口:"
|
|
ss -tlnp 2>/dev/null | grep -E "(9000|8555)" | head -3 | sed 's/^/ /'
|
|
else
|
|
echo -e " 状态: ${RED}○ 停止${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Agent
|
|
echo -e "${CYAN}[Edge Agent]${NC}"
|
|
if systemctl is-active --quiet $AGENT_SERVICE 2>/dev/null; then
|
|
echo -e " 状态: ${GREEN}● 运行中${NC}"
|
|
echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100"
|
|
else
|
|
echo -e " 状态: ${RED}○ 停止${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# HLS 输出
|
|
echo -e "${CYAN}[HLS 输出]${NC}"
|
|
if [ -d "/var/lib/safesight-edge-server/hls" ]; then
|
|
CHANNELS=$(find "/var/lib/safesight-edge-server/hls" -maxdepth 1 -type d 2>/dev/null | wc -l)
|
|
CHANNELS=$((CHANNELS - 1))
|
|
echo " 通道数: $CHANNELS"
|
|
fi
|
|
echo ""
|
|
|
|
# 存储使用
|
|
echo -e "${CYAN}[存储使用]${NC}"
|
|
echo " HLS: $(du -sh /var/lib/safesight-edge-server/hls 2>/dev/null | cut -f1)"
|
|
echo " 日志: $(du -sh /var/lib/safesight-edge-server/logs 2>/dev/null | cut -f1)"
|
|
echo ""
|
|
|
|
echo "命令帮助:"
|
|
echo " $(basename $0) status - 查看状态"
|
|
echo " $(basename $0) start - 启动服务"
|
|
echo " $(basename $0) stop - 停止服务"
|
|
echo " $(basename $0) logs - 查看日志"
|
|
echo " $(basename $0) hw - 硬件监控"
|
|
}
|
|
|
|
cmd_start() {
|
|
echo -e "${YELLOW}启动服务...${NC}"
|
|
systemctl start $MEDIA_SERVICE
|
|
systemctl start $AGENT_SERVICE
|
|
echo -e "${GREEN}✓${NC} 服务已启动"
|
|
echo " 管理界面: http://$(hostname -I | awk '{print $1}'):9100"
|
|
}
|
|
|
|
cmd_stop() {
|
|
echo -e "${YELLOW}停止服务...${NC}"
|
|
systemctl stop $AGENT_SERVICE
|
|
systemctl stop $MEDIA_SERVICE
|
|
echo -e "${GREEN}✓${NC} 服务已停止"
|
|
}
|
|
|
|
cmd_restart() {
|
|
echo -e "${YELLOW}重启服务...${NC}"
|
|
systemctl restart $MEDIA_SERVICE
|
|
systemctl restart $AGENT_SERVICE
|
|
echo -e "${GREEN}✓${NC} 服务已重启"
|
|
}
|
|
|
|
cmd_logs() {
|
|
echo -e "${CYAN}查看日志 (按 Ctrl+C 退出)...${NC}"
|
|
echo ""
|
|
journalctl -u $MEDIA_SERVICE -f
|
|
}
|
|
|
|
cmd_metrics() {
|
|
/opt/safesight-edge-server/scripts/monitor_hw.sh
|
|
}
|
|
|
|
cmd_ddr_status() {
|
|
bash /opt/safesight-edge-server/scripts/ddr_mode.sh status
|
|
}
|
|
|
|
cmd_ddr_performance() {
|
|
bash /opt/safesight-edge-server/scripts/ddr_mode.sh performance
|
|
}
|
|
|
|
cmd_ddr_ondemand() {
|
|
bash /opt/safesight-edge-server/scripts/ddr_mode.sh ondemand
|
|
}
|
|
|
|
cmd_ddr_restore() {
|
|
bash /opt/safesight-edge-server/scripts/ddr_mode.sh restore
|
|
}
|
|
|
|
cmd_overlay_status() {
|
|
bash /opt/safesight-edge-server/scripts/setup-overlayroot.sh status
|
|
}
|
|
|
|
cmd_overlay_disable() {
|
|
bash /opt/safesight-edge-server/scripts/setup-overlayroot.sh disable
|
|
}
|
|
|
|
cmd_overlay_enable() {
|
|
bash /opt/safesight-edge-server/scripts/setup-overlayroot.sh enable
|
|
}
|
|
|
|
cmd_overlay_verify() {
|
|
bash /opt/safesight-edge-server/scripts/setup-overlayroot.sh verify
|
|
}
|
|
|
|
# 主入口
|
|
case "${1:-status}" in
|
|
status)
|
|
cmd_status
|
|
;;
|
|
start)
|
|
cmd_start
|
|
;;
|
|
stop)
|
|
cmd_stop
|
|
;;
|
|
restart)
|
|
cmd_restart
|
|
;;
|
|
logs)
|
|
cmd_logs
|
|
;;
|
|
hw)
|
|
cmd_metrics
|
|
;;
|
|
ddr-status)
|
|
cmd_ddr_status
|
|
;;
|
|
ddr-performance)
|
|
cmd_ddr_performance
|
|
;;
|
|
ddr-ondemand)
|
|
cmd_ddr_ondemand
|
|
;;
|
|
ddr-restore)
|
|
cmd_ddr_restore
|
|
;;
|
|
overlay-status)
|
|
cmd_overlay_status
|
|
;;
|
|
overlay-disable)
|
|
cmd_overlay_disable
|
|
;;
|
|
overlay-enable)
|
|
cmd_overlay_enable
|
|
;;
|
|
overlay-verify)
|
|
cmd_overlay_verify
|
|
;;
|
|
*)
|
|
echo "RK3588 Edge Server 运维脚本"
|
|
echo ""
|
|
echo "用法: sudo $(basename $0) [命令]"
|
|
echo ""
|
|
echo "命令:"
|
|
echo " status 查看运行状态 (默认)"
|
|
echo " start 启动服务"
|
|
echo " stop 停止服务"
|
|
echo " restart 重启服务"
|
|
echo " logs 查看实时日志"
|
|
echo " hw 查看硬件监控"
|
|
echo " ddr-status 查看 DDR 频率策略"
|
|
echo " ddr-performance DDR 切到高性能模式"
|
|
echo " ddr-ondemand DDR 切回 dmc_ondemand"
|
|
echo " ddr-restore 恢复上次保存的 DDR 配置"
|
|
echo " overlay-status 断电保护状态 (overlayroot)"
|
|
echo " overlay-disable 断电保护-临时禁用(维护模式,可写)"
|
|
echo " overlay-enable 断电保护-重新启用(只读保护)"
|
|
echo " overlay-verify 断电保护-重启后验证"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " sudo $(basename $0) status"
|
|
echo " sudo $(basename $0) logs"
|
|
;;
|
|
esac
|