SRS 如何用信号热加载配置而不中断在线连接【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs当 SRS 正在服务在线推流/拉流连接时你修改了srs.conf并需要让新配置生效又不想重启进程、断开任何连接。SRS 的 reload 机制就是为此设计的向进程发送信号即可重新应用配置已有连接保持不断开。本文基于 SRS 仓库内的 Reload 文档 和 Linux Service 文档 给出可执行的操作路径与验证方式。前提条件先确认 SRS 进程正在运行发送 reload 信号前必须有一个在运行的 SRS 进程。仓库中 init.d 脚本 通过 pid 文件定位进程pid 文件取自配置中的pid指令未配置时默认是./objs/srs.pid。两种常用启动方式详见 service.md# 方式一直接用 init.d 脚本启动需在 SRS 根目录下执行脚本内 ROOT 为 ./ cd srs根目录 ./etc/init.d/srs start# 方式二直接运行二进制 ./objs/srs -c conf/srs.conf注意 init.d 脚本 顶部的ROOT、APP、CONFIG均按脚本所在目录解析默认为./objs/srs和./conf/srs.conf所以如果你从其他目录启动过 SRS文档提示需要相应修改脚本中的路径或者从 SRS 根目录调用脚本。修改配置并发送 SIGHUP 触发 reload先编辑你的配置文件例如srs根目录/conf/srs.conf然后从以下三种方式中任选一种触发 reload来自 reload.md# 按进程名发送 SIGHUP killall -1 srs# 按 PID 发送 SIGHUP7635 为文档示例中的进程号替换为你实际的 PID kill -1 7635# 使用 SRS 自带的 init.d 脚本需已链接到 /etc/init.d/srs # 链接方法见 service.md Step2sudo ln -sf /usr/local/srs/etc/init.d/srs /etc/init.d/srs /etc/init.d/srs reload脚本方式内部的行为可以直接对照 init.d 脚本的 reload 函数 理解通过 pid 文件加载进程信息如果进程不存在输出SRS not start.并直接返回向进程发送SIGHUPkill -s SIGHUP pid发送失败输出Reload SRS failed retret再次检查进程仍在运行成功输出SRS reloaded进程消失则输出SRS reload failed.。验证 reload 是否生效验证分三层都来自仓库文档1. 进程仍然存活。用脚本的 status 子命令确认/etc/init.d/srs status进程正常时输出类似SRS(pid pid) is running.文档示例措辞说明 reload 没有把进程打挂。2. 日志中记录了信号。SRS 默认把日志写入文件默认路径./objs/srs.log见 log.md。日志按 session 化格式记录收到的信号log.md 给出的系统信息日志示例中就有这样的行文档示例signo为信号编号[2014-04-04 11:39:26.799][trace][0][11] get a signal, signo2SIGHUP 是信号 1你应看到编号对应的get a signal记录而不是user terminate program这类退出日志。3. 在线连接未中断。这正是 reload.md 声明的用途Donot restart server to apply new config、Donot disconnect user connections。验证时保持一个正在拉流的客户端例如 RTMP 或 HTTP-FLV 播放发送信号后观察播放是否持续即可确认 reload 语义成立。哪些配置不能热加载reload.md 明确列出两项不支持 reload 的配置配置说明daemon是否以守护进程模式启动永远不支持 reloadvhost 的modevhost 作为 origin 还是 edge不允许直接切换文档解释不能直接切换 vhost 模式的原因origin 与 edge 的切换过于复杂origin 一般固定在一个设备组内、实际上不会变成 edgeupnode/origin 重启对用户无影响edge 会自动重试。文档给出的替代操作路径workaround是从配置中删除该 vhost然后 reload确认该 vhost 确实已被删除——reload 是异步的原文Ensure the vhost is deleted, for the reload is async以新的mode重新添加该 vhost然后再 reload 一次。限制与容易混淆的信号reload 由 SIGHUP 触发不要与 init.d 脚本 中的其他子命令混淆rotate发送的是SIGUSR1仅用于重新打开日志文件做 log rotategrace发送SIGQUIT优雅退出restart会先 stop 再 start、会断开连接。三者都不是热加载。daemon与 vhostmode的变更只能按上文 workaround 或重启处理。在 K8s 环境中k8s.md 提到 Auto Reload by Inotify监听 ConfigMap 变更自动 reload的能力但该章节正文仍为 Coming soon...当前仓库文档未给出可用步骤本文不将其作为操作路径。完成一次kill -1 pid或/etc/init.d/srs reload后若 status 显示进程仍在运行、日志出现get a signal且在线播放未中断、新配置项已按预期工作即表示热加载完成对于daemon/vhostmode这类不可热加载项按删除 vhost → reload → 确认删除 → 重新添加 → reload 的两段式路径处理。【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考