十分钟完成 ZLMediaKit Windows 服务部署:开机自启与故障恢复配置
2026/9/10 19:00:33 网站建设 项目流程

十分钟完成 ZLMediaKit Windows 服务部署:开机自启与故障恢复配置

【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit

本手册指导你将 ZLMediaKit 部署为 Windows 服务,实现开机自启与故障自动恢复,适用于服务器无人值守运行场景。按顺序执行即可,全程约十分钟。

一、部署前确认

执行以下清单,确认环境与依赖就绪:

  • 已安装 Visual Studio(勾选 C++ 桌面开发工作负载)与 CMake,可在命令行执行cmake --version
  • Windows 下网络层依赖 wepoll(epoll 兼容实现),随 CMake 构建自动集成,无需单独安装
  • 源码获取,执行:
git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit

构建成功后,确认 conf/ 目录下config.ini的三项内容:日志级别由启动参数-level控制(服务模式下建议设为 info);日志输出目录由-log-dir指定,服务模式下必须指向可写路径,否则日志丢失;端口绑定以config.ini[rtmp]的 1935、[rtsp]的 554、[http]的 80 为准,确认未被本机其他程序占用。

[rtmp] port=1935 [rtsp] port=554

二、服务化落地三步

第 1 步:服务包装程序

由于 MediaServer 本身不是服务程序,需要一个薄的服务包装层。它的职责用四点概括:

  • 注册服务主函数,向 SCM(服务控制管理器)汇报服务状态
  • 安装服务控制处理器,响应停止、暂停、继续指令
  • 以服务子进程方式拉起 MediaServer,并传递-level-log-dir等参数
  • 监控子进程存活,子进程退出时上报失败状态,交由故障恢复机制处理

第 2 步:注册服务与开机自启

以管理员身份打开命令提示符,执行注册命令:

sc create ZLMediaKitService binPath="D:\zlm\zlmediakit_service.exe" start=auto :: binPath= 包装程序完整路径(含依赖 dll 所在目录);start=auto= 开机自动启动

参数含义:binPath指向服务包装程序,MediaServer 与 dll 需与其位于同一目录或已配置环境变量;start=auto将服务设为自动启动,系统登录后无需人工干预。

第 3 步:故障恢复配置

执行以下命令设置进程异常退出后的自动重启策略:

sc failure ZLMediaKitService reset=86400 actions=restart/60000/restart/60000/restart/60000 :: reset=86400 失败计数 24 小时后清零;restart/60000 每次重试前等待 60 秒,共三次

reset=86400表示 24 小时无失败则重置失败计数,避免长期运行后重试次数耗尽;三个restart/60000依次对应第 1 至第 3 次重启动作,间隔 60 秒,便于依赖端口和磁盘资源先恢复。

三、运维三件事

权限:服务默认以 LocalSystem 账户运行,权限过高且不利于审计。建议创建专用本地账户(如zlm_service),仅授予服务目录读写与日志目录写入权限,再执行sc qc ZLMediaKitService确认、必要时调整账户。

日志

  • 通过-log-dir将日志固定到独立磁盘分区,避免与系统日志混写
  • 利用内置日志轮转(-log-slice控制文件数、-log-size控制单文件大小),按天分割便于历史查询
  • 级别选择:生产环境用 info,排障时临时调至 debug,事后改回

资源

  • 为 MediaServer 进程设置内存使用上限(任务管理器 → 进程 → 设置内存上限),防止异常流累积撑爆内存
  • CPU 优先级维持"常规"即可,线程数通过-t参数按核数设置
  • 带宽密集场景可配合系统 QoS 策略限制该进程的出站带宽

四、上线前检查清单

  • sc query ZLMediaKitService返回 STATE 为 RUNNING
  • 依次探测 80、554、1935 端口连通(telnet 127.0.0.1 1935等)
  • 通过 HTTP-FLV 地址播放一路实际媒体流,画面与声音正常
  • 事件查看器(eventvwr.msc)→ Windows 日志 → 系统,无该服务相关的红色错误
  • 重启一次服务器,确认服务随开机自动拉起
  • 手动结束 MediaServer 子进程,确认 60 秒内自动重启

五、排障速查

现象常见原因处理方式
服务创建成功但无法启动binPath路径错误、含空格未加引号sc qc ZLMediaKitService核对 binPath,重执行sc create前先用sc delete ZLMediaKitService清理
服务启动后立即停止端口被占用(1935/554/80)执行netstat -ano查占用进程,修改config.ini端口后重启服务
启动报依赖缺失运行时缺少 VC 运行库或 dll 与 exe 不在同目录安装对应 Visual C++ 运行库;将依赖 dll 与 MediaServer 放同一目录
服务状态 Unknown 或 1053 超时包装程序未在规定时间内调用服务汇报检查包装程序控制台日志,确认服务主函数已注册且子进程拉起逻辑未卡死

配置路径错误是最常见的一类问题:MediaServer 默认加载的是可执行文件同目录下的config.ini,修改 conf/ 中的范例文件不会生效,请以-c参数显式指定或修改目标目录中的实际文件。

结尾

至此,注册、开机自启、故障恢复与日常运维四部分均已落地,ZLMediaKit 可作为无人值守的长期服务运行。后续可持续关注官方对 Windows 服务的原生支持进展,逐步减少包装层维护成本。

【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询