部署:開機(jī)自啟與故障恢復(fù)配置)
十分鐘完成 ZLMediaKit Windows 服務(wù)部署開機(jī)自啟與故障恢復(fù)配置【免費(fèi)下載鏈接】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 C11項(xiàng)目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit本手冊(cè)指導(dǎo)你將 ZLMediaKit 部署為 Windows 服務(wù)實(shí)現(xiàn)開機(jī)自啟與故障自動(dòng)恢復(fù)適用于服務(wù)器無(wú)人值守運(yùn)行場(chǎng)景。按順序執(zhí)行即可全程約十分鐘。一、部署前確認(rèn)執(zhí)行以下清單確認(rèn)環(huán)境與依賴就緒已安裝 Visual Studio勾選 C 桌面開發(fā)工作負(fù)載與 CMake可在命令行執(zhí)行cmake --versionWindows 下網(wǎng)絡(luò)層依賴 wepollepoll 兼容實(shí)現(xiàn)隨 CMake 構(gòu)建自動(dòng)集成無(wú)需單獨(dú)安裝源碼獲取執(zhí)行g(shù)it clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit構(gòu)建成功后確認(rèn) conf/ 目錄下config.ini的三項(xiàng)內(nèi)容日志級(jí)別由啟動(dòng)參數(shù)-level控制服務(wù)模式下建議設(shè)為 info日志輸出目錄由-log-dir指定服務(wù)模式下必須指向可寫路徑否則日志丟失端口綁定以config.ini中[rtmp]的 1935、[rtsp]的 554、[http]的 80 為準(zhǔn)確認(rèn)未被本機(jī)其他程序占用。[rtmp] port1935 [rtsp] port554二、服務(wù)化落地三步第 1 步服務(wù)包裝程序由于 MediaServer 本身不是服務(wù)程序需要一個(gè)薄的服務(wù)包裝層。它的職責(zé)用四點(diǎn)概括注冊(cè)服務(wù)主函數(shù)向 SCM服務(wù)控制管理器匯報(bào)服務(wù)狀態(tài)安裝服務(wù)控制處理器響應(yīng)停止、暫停、繼續(xù)指令以服務(wù)子進(jìn)程方式拉起 MediaServer并傳遞-level、-log-dir等參數(shù)監(jiān)控子進(jìn)程存活子進(jìn)程退出時(shí)上報(bào)失敗狀態(tài)交由故障恢復(fù)機(jī)制處理第 2 步注冊(cè)服務(wù)與開機(jī)自啟以管理員身份打開命令提示符執(zhí)行注冊(cè)命令sc create ZLMediaKitService binPathD:\zlm\zlmediakit_service.exe startauto :: binPath 包裝程序完整路徑含依賴 dll 所在目錄startauto 開機(jī)自動(dòng)啟動(dòng)參數(shù)含義binPath指向服務(wù)包裝程序MediaServer 與 dll 需與其位于同一目錄或已配置環(huán)境變量startauto將服務(wù)設(shè)為自動(dòng)啟動(dòng)系統(tǒng)登錄后無(wú)需人工干預(yù)。第 3 步故障恢復(fù)配置執(zhí)行以下命令設(shè)置進(jìn)程異常退出后的自動(dòng)重啟策略sc failure ZLMediaKitService reset86400 actionsrestart/60000/restart/60000/restart/60000 :: reset86400 失敗計(jì)數(shù) 24 小時(shí)后清零restart/60000 每次重試前等待 60 秒共三次reset86400表示 24 小時(shí)無(wú)失敗則重置失敗計(jì)數(shù)避免長(zhǎng)期運(yùn)行后重試次數(shù)耗盡三個(gè)restart/60000依次對(duì)應(yīng)第 1 至第 3 次重啟動(dòng)作間隔 60 秒便于依賴端口和磁盤資源先恢復(fù)。三、運(yùn)維三件事權(quán)限服務(wù)默認(rèn)以 LocalSystem 賬戶運(yùn)行權(quán)限過(guò)高且不利于審計(jì)。建議創(chuàng)建專用本地賬戶如zlm_service僅授予服務(wù)目錄讀寫與日志目錄寫入權(quán)限再執(zhí)行sc qc ZLMediaKitService確認(rèn)、必要時(shí)調(diào)整賬戶。日志通過(guò)-log-dir將日志固定到獨(dú)立磁盤分區(qū)避免與系統(tǒng)日志混寫利用內(nèi)置日志輪轉(zhuǎn)-log-slice控制文件數(shù)、-log-size控制單文件大小按天分割便于歷史查詢級(jí)別選擇生產(chǎn)環(huán)境用 info排障時(shí)臨時(shí)調(diào)至 debug事后改回資源為 MediaServer 進(jìn)程設(shè)置內(nèi)存使用上限任務(wù)管理器 → 進(jìn)程 → 設(shè)置內(nèi)存上限防止異常流累積撐爆內(nèi)存CPU 優(yōu)先級(jí)維持常規(guī)即可線程數(shù)通過(guò)-t參數(shù)按核數(shù)設(shè)置帶寬密集場(chǎng)景可配合系統(tǒng) QoS 策略限制該進(jìn)程的出站帶寬四、上線前檢查清單sc query ZLMediaKitService返回 STATE 為 RUNNING依次探測(cè) 80、554、1935 端口連通telnet 127.0.0.1 1935等通過(guò) HTTP-FLV 地址播放一路實(shí)際媒體流畫面與聲音正常事件查看器eventvwr.msc→ Windows 日志 → 系統(tǒng)無(wú)該服務(wù)相關(guān)的紅色錯(cuò)誤重啟一次服務(wù)器確認(rèn)服務(wù)隨開機(jī)自動(dòng)拉起手動(dòng)結(jié)束 MediaServer 子進(jìn)程確認(rèn) 60 秒內(nèi)自動(dòng)重啟五、排障速查現(xiàn)象常見原因處理方式服務(wù)創(chuàng)建成功但無(wú)法啟動(dòng)binPath路徑錯(cuò)誤、含空格未加引號(hào)用sc qc ZLMediaKitService核對(duì) binPath重執(zhí)行sc create前先用sc delete ZLMediaKitService清理服務(wù)啟動(dòng)后立即停止端口被占用1935/554/80執(zhí)行netstat -ano查占用進(jìn)程修改config.ini端口后重啟服務(wù)啟動(dòng)報(bào)依賴缺失運(yùn)行時(shí)缺少 VC 運(yùn)行庫(kù)或 dll 與 exe 不在同目錄安裝對(duì)應(yīng) Visual C 運(yùn)行庫(kù)將依賴 dll 與 MediaServer 放同一目錄服務(wù)狀態(tài) Unknown 或 1053 超時(shí)包裝程序未在規(guī)定時(shí)間內(nèi)調(diào)用服務(wù)匯報(bào)檢查包裝程序控制臺(tái)日志確認(rèn)服務(wù)主函數(shù)已注冊(cè)且子進(jìn)程拉起邏輯未卡死配置路徑錯(cuò)誤是最常見的一類問(wèn)題MediaServer 默認(rèn)加載的是可執(zhí)行文件同目錄下的config.ini修改 conf/ 中的范例文件不會(huì)生效請(qǐng)以-c參數(shù)顯式指定或修改目標(biāo)目錄中的實(shí)際文件。結(jié)尾至此注冊(cè)、開機(jī)自啟、故障恢復(fù)與日常運(yùn)維四部分均已落地ZLMediaKit 可作為無(wú)人值守的長(zhǎng)期服務(wù)運(yùn)行。后續(xù)可持續(xù)關(guān)注官方對(duì) Windows 服務(wù)的原生支持進(jìn)展逐步減少包裝層維護(hù)成本?!久赓M(fèi)下載鏈接】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 C11項(xiàng)目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考