safesight/scripts/ops.sh
tian 227dc04004 feat(edge): 断电保护(overlayroot+/data)与产品镜像批量生产流程
- 新增 setup-overlayroot.sh: 一键断电保护
  - overlayroot(tmpfs) 保护根分区, 断电不再损坏文件系统
  - 自动建 /data 独立分区 + fstab bind 挂载运行数据
  - 迁移存量数据, journald 内存日志限容
  - disable/enable 一键切换维护模式(适配香橙派 U-Boot/extlinux, 无 GRUB)
- 新增 prepare-image.sh: 母卡出厂化清理
  - 清 machine-id/SSH 密钥/device_id/hostname/日志
  - 防误: 检测 overlayroot 启用状态, 保证镜像为可写出厂状态
- 新增 init-device.sh: 每台初始化
  - 主机名/静态IP(netplan)/身份验证
  - /data 自动 growpart 扩容到整卡剩余空间(64G 产品卡)
  - 统一启用断电保护
- deploy.sh/ops.sh/package-offline.sh: 集成新脚本
  - ops.sh 新增 overlay-status/disable/enable/verify
- docs/deployment.md: 重写为主流程文档
  - 产品镜像批量生产(16G 母卡->小镜像->Etcher 批量烧录->每台初始化)
  - 移除废弃的克隆卡流程
2026-08-01 16:45:47 +08:00

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