问题背景
ZLMediaKit 在服务重启后可能会出现已配置的拉流任务丢失的问题。本文提供一种通过 API 自动恢复拉流配置的解决方法。
解决方法概述
- 使用
jq
工具解析 JSON 配置文件
- 通过 Shell 脚本调用 ZLMediaKit API 批量恢复拉流任务
- 配置开机自启动实现自动化恢复
实施步骤
1. 安装 jq 工具
1 2 3 4 5 6 7 8
| sudo apt-get install jq
sudo yum install jq
jq --version
|
2. 创建流配置文件 streams.json
将需要持久化的拉流配置保存为 JSON 格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [ { "vhost": "192.168.16.10", "app": "live", "stream": "xxx225", "url": "rtsp://admin:admin@192.168.11.225:554/h266/ch1/main/av_stream", "secret": "CCCOuGTsZG7EZoHtt1l6HUmbBW6xP4ri" }, { "vhost": "192.168.16.10", "app": "live", "stream": "xxx224", "url": "rtsp://admin:admin@192.168.11.224:554/h266/ch1/main/av_stream", "secret": "CCCOuGTsZG7EZoHtt1l6HUmbBW6xP4ri" }, { "vhost": "192.168.16.10", "app": "live", "stream": "xxx223", "url": "rtsp://admin:admin@192.168.11.223:554/h266/ch1/main/av_stream", "secret": "CCCOuGTsZG7EZoHtt1l6HUmbBW6xP4ri" } ]
|
⚠️ 注意事项:
- 确保字段与 ZLMediaKit API 文档要求一致
- 敏感信息建议设置文件权限:
chmod 600 streams.json
- 建议将文件存储在安全目录(如
/etc/zlmediakit/
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/bash
if ! command -v jq &> /dev/null; then echo "错误:jq 未安装,请先执行安装步骤" exit 1 fi
CONFIG_FILE="/path/to/streams.json"
API_URL="http://127.0.0.1:8080/index/api/addStreamProxy"
jq -c '.[]' "$CONFIG_FILE" | while read -r item; do curl -s -X POST "$API_URL" \ -H "Content-Type: application/json" \ -d "$item" done
echo "拉流配置恢复完成"
|
📝 使用说明:
- 修改
CONFIG_FILE
为实际存储路径
- 确认 API_URL 的端口号与配置文件一致
- 添加执行权限:
chmod +x restore_zlmediakit.sh
4. 配置开机自启动
方法一:通过 crontab
1 2 3 4 5
| crontab -e
@reboot /absolute/path/to/restore_zlmediakit.sh >> /var/log/zlmediakit_restore.log 2>&1
|
方法二:创建 systemd 服务
1 2 3 4 5 6 7 8 9 10 11 12
| [Unit] Description=ZLMediaKit Pull Stream Restorer After=network.target
[Service] ExecStart=/absolute/path/to/restore_zlmediakit.sh User=your_user Environment="PATH=/usr/bin:/usr/local/bin"
[Install] WantedBy=multi-user.target
|
1 2
| sudo systemctl enable zlmediakit-restore
|
验证与维护
手动测试脚本
1 2
| ./restore_zlmediakit.sh
|
查看运行状态
1 2 3
| systemctl status zlmediakit-restore journalctl -u zlmediakit-restore
|
日志分析
- 默认日志路径:
/var/log/zlmediakit/
- 关注 API 返回状态码(200 表示成功)
注意事项
必须验证项
- ✅ ZLMediaKit API 端点地址和端口
- ✅ 流媒体服务器 IP 地址是否固定
- ✅ 网络策略是否允许本地回环访问(127.0.0.1)
安全加固(可选)
1 2 3 4
| chmod 700 restore_zlmediakit.sh
chmod 600 streams.json
|