- SRS Wiki 首页
- SRS Arch
- ARM转码
- 带宽测试
- 安装
- 客户端 SDK
- 开源的客户端 SDK
- DeliveryHDS
- Delivery HLS
- Delivery HTTP FLV Stream
- Delivery Method
- 分发 RTMP 流
- HttpServer
- DRM
- DVR
- Edge Server
- 功能列表
- Live Streaming Transcode
- 点播 FLV 流
- Forward For Small Cluster
- GIT
- GPERF 内存和性能分析
- gprof 性能分析
- 心跳
- SRS 支持 HEVC 编码
- SRS 简介
- HTTP API
- HTTP Callback
- SRS Embeded HTTP Server
- 集成开发环境
- 采集
- K8S
- Kafka
- SRS 系统服务
- LiveShow
- LogRotate
- 低延时直播应用
- Exec
- OriginCluster
- Perf性能分析
- Performance Banchmark
- Project
- Performance benchmark for SRS on RaspberryPi
- Reload
- REUSE PORT
- WebRTC
- ATC支持HLS/HDS热备
- 分发方式比较
- RTMP Handshake
- URL Specification
- Use Scenarios
- ARM上部署SRS实例
- DASH部署实例
- Demo的部署
- FFMPEG转码部署实例
- RTMP流转发(Forward)部署实例
- HLS部署实例
- SRS-HTTP服务部署实例
- SRS-HTTP-FLV部署实例
- SRS-HTTP-FLV集群部署实例
- Ingest采集实例
- RTMP源站集群部署实例
- RTMP低延时配置
- RTMP部署实例
- RTMP边缘集群部署实例
- SRT deploy example
- 转码后分发HLS部署实例
- Security
- 服务器端开发脚本
- 开始使用
- Snapshot
- SpecialControl
- SRS提供的librtmp
- SRS for linux-arm
- SRS Log System
- SRT媒体编码支持格式
- SRT参数配置
- SRT直播地址格式简介
- SRT
- Streamer
- TimeJitter
- Web P2P
- Windows下的SRS
SRS 系统服务
SRS提供多种启动的方式,包括:
- 在git目录直接启动,简单直接,但系统重启后需要手动启动。
- 系统服务,init.d脚本:SRS提供
srs/trunk/etc/init.d/srs
脚本,可以作为CentOS或者Ubuntu的系统服务自动启动。
可以直接下载release的binary,提供了几个常见系统的安装包,安装程序会安装系统服务,直接以系统服务启动即可。参考:Github: release或者国内镜像: release
Manual
若不需要添加到系统服务,每次重启后需要手动启动SRS,可以直接在srs的trunk目录执行脚本:
cd srs/trunk &&
./etc/init.d/srs start
init.d
SRS作为系统服务启动,需要以下几步:
- 安装srs:安装脚本会自动修改init.d脚本,将
ROOT="./"
改为安装目录。 - 链接安装目录的
init.d/srs
到/etc/init.d/srs
- 添加到系统服务,CentOS和Ubuntu方法不一样。
Step1: 安装SRS
编译SRS后,可执行命令安装SRS:
make && sudo make install
安装命令会将srs默认安装到/usr/local/srs
中,可以在configure时指定其他目录,譬如./configure --prefix=`pwd`/_release
可以安装到当前目录的_release目录(可以不用sudo安装,直接用make install
即可安装。
Step2: 链接脚本:
sudo ln -sf \
/usr/local/srs/etc/init.d/srs \
/etc/init.d/srs
备注:若SRS安装到其他目录,将/usr/local/srs
替换成其他目录。
备注:也可以使用其他的名称,譬如/etc/init.d/srs
,可以任意名称,启动时也用该名称。
Step3:添加服务:
#centos 6
sudo /sbin/chkconfig --add srs
或者
#ubuntu12
sudo update-rc.d srs defaults
使用init.d脚本管理SRS
查看SRS状态:
/etc/init.d/srs status
启动SRS:
/etc/init.d/srs start
停止SRS:
/etc/init.d/srs stop
重启SRS:
/etc/init.d/srs restart
Reload SRS:
/etc/init.d/srs reload
日志切割,给SRS发送SIGUSR1
信号:
/etc/init.d/srs rotate
平滑退出,给SRS发送SIGQUIT
信号:
/etc/init.d/srs grace
systemctl
CentOS7使用systemctl管理服务,我们在init.d的基础上新增了systemctl的配置:
./configure && make && sudo make install &&
sudo ln -sf /usr/local/srs/etc/init.d/srs /etc/init.d/srs &&
sudo cp -f /usr/local/srs/usr/lib/systemd/system/srs.service /usr/lib/systemd/system/srs.service &&
sudo systemctl daemon-reload && sudo systemctl enable srs
Remark: 必须拷贝srs.service,否则在enable srs时会出错。
使用systemctl启动SRS服务:
sudo systemctl start srs
Gracefully Upgrade
Gracefully Upgrade是平滑升级,就是指老的连接服务完后退出,新版本的服务继续提供服务,对业务没有影响,涉及的技术包括:
- 解决侦听冲突的问题,新版本的服务进程也需要侦听同样的端口,才能提供服务。一定时间内,新老进程是同时提供服务的。
- 老进程关闭侦听,不再接受新连接。老进程上就只有已经存在的连接,等老的连接服务完后再退出。 这就是Gracefully Quit平滑退出。
Note: 关于这个机制,这里#1579有更多的探讨。
SRS3主要支持Gracefully Quit平滑退出:
- 使用信号
SIGQUIT
作为平滑退出信号,也可以使用服务命令/etc/init.d/srs grace
。 - 新增配置,
grace_start_wait
,等待一定时间后开始GracefullyQuit,等待Service摘除Pod,默认2.3秒,参考#1579。 - 新增配置,
grace_final_wait
,等待连接退出后,需要等待一定的时间,默认3.2秒,参考#1579。 - 新增配置,
force_grace_quit
,强制使用Gracefully Quit,而不用Fast Quit,原因参考#1579。
# For gracefully quit, wait for a while then close listeners,
# because K8S notify SRS with SIGQUIT and update Service simultaneously,
# maybe there is some new connections incoming before Service updated.
# @see https://github.com/ossrs/srs/issues/1595
# default: 2300
grace_start_wait 2300;
# For gracefully quit, final wait for cleanup in milliseconds.
# @see https://github.com/ossrs/srs/issues/1579
# default: 3200
grace_final_wait 3200;
# Whether force gracefully quit, never fast quit.
# By default, SIGTERM which means fast quit, is sent by K8S, so we need to
# force SRS to treat SIGTERM as gracefully quit for gray release or canary.
# @see https://github.com/ossrs/srs/issues/1579
# default: off
force_grace_quit off;
Note: 关于平滑退出的命令和演示,可以查看#1579。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论