zlmediakit重启拉流配置丢失一种简单解决方法

ZLMediaKit 重启后拉流配置丢失一种简单解决方法

问题背景

ZLMediaKit 在服务重启后可能会出现已配置的拉流任务丢失的问题。本文提供一种通过 API 自动恢复拉流配置的解决方法。


解决方法概述

  1. 使用 jq 工具解析 JSON 配置文件
  2. 通过 Shell 脚本调用 ZLMediaKit API 批量恢复拉流任务
  3. 配置开机自启动实现自动化恢复

实施步骤

1. 安装 jq 工具

1
2
3
4
5
6
7
8
# Ubuntu/Debian 系统
sudo apt-get install jq

# CentOS/RHEL 系统
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/

3. 创建恢复脚本 restore_zlmediakit.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

# 检查 jq 是否安装
if ! command -v jq &> /dev/null; then
echo "错误:jq 未安装,请先执行安装步骤"
exit 1
fi

# JSON 文件路径
CONFIG_FILE="/path/to/streams.json"

# API 地址(根据实际环境修改端口)
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
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
# /etc/systemd/system/zlmediakit-restore.service
[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
# 检查返回结果或查看 ZLMediaKit 日志

查看运行状态

1
2
3
# 如果使用 systemd
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