前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SRS系统服务

SRS系统服务

作者头像
CiiLii西里网
发布2023-04-18 15:49:18
8580
发布2023-04-18 15:49:18
举报
文章被收录于专栏:ECS服务器

SRS提供多种启动的方式,包括:

  • 在git目录直接启动,简单直接,但系统重启后需要手动启动。
  • 系统服务,init.d脚本:SRS提供srs/trunk/etc/init.d/srs脚本,可以作为CentOS或者Ubuntu的系统服务自动启动。

可以直接下载release的binary,提供了几个常见系统的安装包,安装程序会安装系统服务,直接以系统服务启动即可。参考:Github: release或者国内镜像: release

Manual

若不需要添加到系统服务,每次重启后需要手动启动SRS,可以直接在srs的trunk目录执行脚本:

代码语言:javascript
复制
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:

代码语言:javascript
复制
make&&sudomakeinstall

复制

安装命令会将srs默认安装到/usr/local/srs中,可以在configure时指定其他目录,譬如./configure --prefix=`pwd`/_release可以安装到当前目录的_release目录(可以不用sudo安装,直接用make install即可安装。

Step2: 链接脚本:

代码语言:javascript
复制
sudoln -sf \
    /usr/local/srs/etc/init.d/srs \
    /etc/init.d/srs

复制

备注:若SRS安装到其他目录,将/usr/local/srs替换成其他目录。

备注:也可以使用其他的名称,譬如/etc/init.d/srs,可以任意名称,启动时也用该名称。

Step3:添加服务:

代码语言:javascript
复制
#centos 6
sudo /sbin/chkconfig --add srs

复制

或者

代码语言:javascript
复制
#ubuntu12
sudo update-rc.d srs defaults

复制

使用init.d脚本管理SRS

查看SRS状态:

代码语言:javascript
复制
/etc/init.d/srs status

复制

启动SRS:

代码语言:javascript
复制
/etc/init.d/srs start

复制

停止SRS:

代码语言:javascript
复制
/etc/init.d/srs stop

复制

重启SRS:

代码语言:javascript
复制
/etc/init.d/srs restart

复制

Reload SRS:

代码语言:javascript
复制
/etc/init.d/srs reload

复制

日志切割,给SRS发送SIGUSR1信号:

代码语言:javascript
复制
/etc/init.d/srs rotate

复制

平滑退出,给SRS发送SIGQUIT信号:

代码语言:javascript
复制
/etc/init.d/srs grace

复制

systemctl

Ubuntu20使用systemctl管理服务,我们在init.d的基础上新增了systemctl的配置:

代码语言:javascript
复制
./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服务:

代码语言:javascript
复制
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
代码语言:javascript
复制
# 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#issuecomment-587516567
# default: 2300
grace_start_wait 2300;
# For gracefully quit, final wait for cleanup in milliseconds.
# @see https://github.com/ossrs/srs/issues/1579#issuecomment-587414898
# 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#issuecomment-587475077
# default: off
force_grace_quit off;

复制

Note: 关于平滑退出的命令和演示,可以查看#1579

Winlin 2019.10

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Manual​
  • init.d​
  • systemctl​
  • Gracefully Upgrade​
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档