智慧园区 FFmpeg 自动化运维体系 - 完整部署清单与运维巡检手册

本手册涵盖环境准备、脚本部署、定时任务配置、日常巡检、故障排查全流程,可直接用于园区项目落地与长期运维,确保音视频处理系统稳定运行。

一、 部署清单(分步执行,确保零遗漏)

1. 服务器环境准备(Linux 系统,Ubuntu/CentOS 通用)

步骤 操作内容 命令/说明
1.1 安装 FFmpeg(完整版) Ubuntu/Debian:sudo apt update && sudo apt install ffmpeg -y
CentOS:sudo yum install epel-release -y && sudo yum install ffmpeg -y
1.2 验证 FFmpeg 安装 ffmpeg -version(显示版本信息即成功)
1.3 安装依赖工具 sudo apt install curl cron logrotate -y(curl 用于告警,cron 用于定时任务,logrotate 用于日志轮转)
1.4 创建专用运维用户(可选,提升安全性) sudo useradd -m park_ops && sudo passwd park_ops
赋予 sudo 权限:sudo usermod -aG sudo park_ops
1.5 创建目录结构(核心) bash<br>sudo mkdir -p /data/park/{record,ai_input,scripts,logs}<br>sudo chown -R park_ops:park_ops /data/park<br>

2. 脚本部署(上传至 /data/park/scripts 目录)

脚本名称 功能 部署操作
camera_record.sh 摄像头 24h 录制 + 故障自动重启 1. 上传脚本至 /data/park/scripts
2. 修改配置:RTSP_URL/CAMERA_ID/SAVE_DIR
3. 赋予权限:chmod +x camera_record.sh
batch_ai_preprocess.sh 录像批量 AI 预处理(分辨率/帧率调整) 1. 上传脚本,修改 INPUT_DIR/OUTPUT_DIR
2. 增加磁盘预检(参考之前的改造方案)
3. 赋予权限:chmod +x batch_ai_preprocess.sh
history_record_compress.sh 历史录像 H.265 压缩(节省 50% 存储) 1. 上传脚本,修改 RECORD_DIR/KEEP_DAYS
2. 增加磁盘预检
3. 赋予权限:chmod +x history_record_compress.sh
disk_monitor_alert.sh 磁盘监控 + 企微/钉钉告警 + 静默/恢复通知 1. 上传脚本,配置 ALERT_CHANNEL/WEBHOOK
2. 调整 ALERT_THRESHOLD/SILENT_PERIOD
3. 赋予权限:chmod +x disk_monitor_alert.sh

3. 定时任务配置(crontab)

park_ops 用户配置,避免 root 权限风险

  1. 编辑定时任务:crontab -e
  2. 添加以下内容(根据园区需求调整执行频率)
    # 1. 磁盘监控:每30分钟执行一次
    */30 * * * * /data/park/scripts/disk_monitor_alert.sh
    
    # 2. 历史录像压缩:每周日凌晨2点执行(低峰期)
    0 2 * * 0 /data/park/scripts/history_record_compress.sh
    
    # 3. 批量AI预处理:每天凌晨3点执行(低峰期)
    0 3 * * * /data/park/scripts/batch_ai_preprocess.sh
    
    # 4. 日志轮转:每天凌晨4点执行(系统自带logrotate可省略,此处为冗余配置)
    0 4 * * * /usr/sbin/logrotate /etc/logrotate.d/park_ffmpeg
    
  3. 重启 cron 服务:sudo systemctl restart cron
  4. 验证定时任务:crontab -l(显示配置内容即成功)

4. 日志轮转配置(避免日志占满磁盘)

  1. 创建 logrotate 配置文件:sudo vi /etc/logrotate.d/park_ffmpeg
  2. 写入以下内容
    /data/park/logs/*.log {
        daily         # 每天轮转一次
        rotate 30     # 保留30天日志
        compress      # 压缩历史日志
        missingok     # 日志文件不存在时忽略
        notifempty    # 空日志不轮转
        create 0644 park_ops park_ops  # 新建日志文件权限
        postrotate    # 轮转后无需重启服务
            /bin/true
        endscript
    }
    
  3. 测试日志轮转:sudo logrotate -f /etc/logrotate.d/park_ffmpeg

5. 后台启动摄像头录制脚本

# 切换到脚本目录
cd /data/park/scripts
# 后台启动(nohup 确保终端关闭后继续运行)
nohup ./camera_record.sh &
# 查看进程是否运行
ps -ef | grep camera_record.sh | grep -v grep

二、 日常运维巡检手册(每日/每周/每月)

1. 每日巡检(5分钟快速检查)

检查项 操作命令 正常状态 异常处理
录制进程是否存活 `ps -ef grep camera_record.sh` 显示进程 ID
磁盘使用率是否正常 df -h /data/park 使用率 < 告警阈值(默认85%) 手动执行压缩脚本,清理过期录像
告警脚本是否运行 grep "磁盘分区" /data/park/logs/disk_monitor.log 每30分钟有日志记录 检查 crontab 定时任务是否生效
录像文件是否生成 `ls -lh /data/park/record grep $(date +%Y%m%d)` 有当日命名的 MP4 文件

2. 每周巡检(深度检查,建议周日执行)

检查项 操作命令 正常状态 异常处理
历史录像压缩是否成功 grep "压缩完成" /data/park/logs/history_record_compress.log 显示压缩后的文件大小 检查 FFmpeg 是否支持 libx265 编码器
AI 预处理是否完成 `ls -lh /data/park/ai_input grep _ai_pre.mp4` 有预处理后的文件
日志文件是否轮转 `ls -lh /data/park/logs grep .log.gz` 存在压缩的历史日志
静默周期是否生效 grep "静默" /data/park/logs/disk_monitor.log 磁盘超标时1小时内仅告警1次 检查 ALERT_FLAG_FILE 标记文件是否生成

3. 每月巡检(系统优化,建议月底执行)

  1. 清理过期录像:根据园区录像保留政策,删除超过期限的文件(如保留30天)
    find /data/park/record -name "*.mp4" -mtime +30 -delete
    
  2. 检查服务器资源:使用 top/htop 查看 CPU/内存占用,避免 FFmpeg 进程占用过高资源
  3. 更新 FFmpeg:修复已知漏洞,提升性能
    sudo apt update && sudo apt upgrade ffmpeg -y
    
  4. 备份配置文件:将 /data/park/scripts 目录下的脚本备份至远程服务器,避免意外丢失

三、 常见故障排查指南

故障现象 可能原因 排查步骤 解决方案
录制脚本启动后立即退出 1. RTSP 地址错误
2. 摄像头离线
3. 权限不足
1. 查看录制日志:tail -f /data/park/logs/cam001_record.log
2. 测试 RTSP 连通性:ffmpeg -i rtsp://xxx
1. 核对摄像头账号密码和流地址
2. 检查园区网络是否可达摄像头
3. 赋予脚本执行权限
磁盘告警但未收到群消息 1. Webhook 地址错误
2. 服务器无外网权限
3. 钉钉关键词不匹配
1. 测试 Webhook:curl -I 企微/钉钉Webhook
2. 查看告警日志:grep "告警已发送" /data/park/logs/disk_monitor.log
1. 重新复制机器人 Webhook 地址
2. 配置服务器防火墙允许访问企微/钉钉API
3. 确保钉钉消息包含安全关键词
录像文件体积过大 1. 未启用 H.265 压缩
2. 码率设置过高
1. 检查压缩脚本配置
2. 查看录像编码格式:ffmpeg -i 录像文件.mp4
1. 确保压缩脚本使用 -c:v libx265
2. 调整 -crf 参数(值越大压缩率越高)
AI 预处理速度慢 1. 服务器 CPU 性能不足
2. 未启用 -preset fast
1. 使用 top 查看 CPU 占用
2. 检查预处理脚本参数
1. 升级服务器 CPU 或增加核心数
2. 确保脚本中添加 -preset fast 参数

四、 应急响应流程(存储溢出/录制中断)

1. 存储溢出应急处理

  1. 紧急停止非核心进程:暂停 AI 预处理和压缩脚本,优先保证录制不中断
  2. 手动清理过期录像:执行 find /data/park/record -mtime +7 -delete(删除7天前的录像)
  3. 临时降低告警阈值:修改 disk_monitor_alert.shALERT_THRESHOLD=80,提前预警
  4. 扩容磁盘:联系运维团队扩展 /data/park 所在磁盘容量

2. 全量录制中断应急处理

  1. 检查摄像头集群状态:确认是否为园区摄像头批量离线
  2. 检查网络连通性:ping 摄像头 IP,排查交换机/路由器故障
  3. 重启录制脚本:批量重启所有摄像头录制进程
    ps -ef | grep camera_record.sh | grep -v grep | awk '{print $2}' | xargs kill -9
    nohup ./camera_record_cam001.sh &
    nohup ./camera_record_cam002.sh &
    
  4. 启用备用存储:将录像临时保存至服务器其他磁盘分区
Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐