srs/trunk/3rdparty/srs-docs/doc/service.md
2025-06-27 07:23:45 -04:00

176 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Linux Service
sidebar_label: Linux Service
hide_title: false
hide_table_of_contents: false
---
# SRS Linux Service
There are many ways to startup SRS:
* Directly run srs at the trunk/objs, and need start again when system restart.
* Linux service, the init.d scirpt at `srs/trunk/etc/init.d/srs`, and user can add to linux service when linked to the /etc/init.d/srs then add as service `/sbin/chkconfig --add srs`.
The SRS release binary can be downloaded from release site, we can install as system service, see: [Github: release](http://ossrs.net/srs.release) or [Mirror for China: release](http://www.ossrs.net)
## Manual
We donot need to add to linux service to directly start SRS:
```bash
cd srs/trunk &&
./etc/init.d/srs start
```
or
```bash
cd srs/trunk &&
./objs/srs -c conf/srs.conf
```
## init.d
Install and startup SRS as linux system service:
* Build SRS: the install script will modify the INSTALL ROOT of init.d script.
* Link to init.d: link the `trunk/etc/init.d/srs` to `/etc/init.d/srs`
* Add to linux service: use /sbin/chkconfig for Centos.
<strong>Step1:</strong> Build and Install SRS
Intall SRS when build ok:
```bash
make && sudo make install
```
the install of make will install srs to the prefix dir, default to `/usr/local/srs`, which is specified by configure, for instance, ```./configure --prefix=`pwd`/_release``` set the install dir to _release of current dir to use `make install` without sudo.
<strong>Step2:</strong> Link script to init.d:
```bash
sudo ln -sf \
/usr/local/srs/etc/init.d/srs \
/etc/init.d/srs
```
<strong>Step3:</strong>Add as linux service:
```bash
#centos 6
sudo /sbin/chkconfig --add srs
```
or
```bash
#ubuntu12
sudo update-rc.d srs defaults
```
Use init.d script
Get the status of SRS:
```bash
/etc/init.d/srs status
```
Start SRS
```bash
/etc/init.d/srs start
```
Stop SRS
```bash
/etc/init.d/srs stop
```
Restart SRS
```bash
/etc/init.d/srs restart
```
Reload SRS
```bash
/etc/init.d/srs reload
```
For logrotate(`SIGUSR1`):
```bash
/etc/init.d/srs rotate
```
For Gracefully Quit(`SIGQUIT`):
```bash
/etc/init.d/srs grace
```
## systemctl
Ubuntu20 use systemctl to manage services, we also need to install init.d service, then add to 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: We MUST copy the srs.service, or we couldn't enable the service by systemctl.
Use systemctl to start SRS:
```
sudo systemctl start srs
```
## Gracefully Upgrade
Gracefully Upgrade allows upgrade with zero downtime, it can be done by:
* New SRS and old SRS should be able to listen at the same ports. They provide services in the same ports simultaneously.
* The old SRS then closes listeners, and quit util all connections closed, this is Gracefully Quit.
> Note: About more informations, please see [#1579](https://github.com/ossrs/srs/issues/1579#issuecomment-587233844).
SRS3 supports Gracefully Quit:
* Use signal `SIGQUIT`, or command `/etc/init.d/srs grace`
* A new config `grace_start_wait` to wait for a while then start gracefully quit, default 2.3s
* A new config `grace_final_wait` allows wait for a few minutes finally, default 3.2s
* A new config `force_grace_quit` to force gracefully quit, see [#1579](https://github.com/ossrs/srs/issues/1579#issuecomment-587475077).
```bash
# 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: There is a example for Gracefully Quit, see [#1579](https://github.com/ossrs/srs/issues/1579#issuecomment-587414898)
Winlin 2019.10
![](https://ossrs.io/gif/v1/sls.gif?site=ossrs.io&path=/lts/doc/en/v7/service)