diff --git a/README.md b/README.md index e380d3779..221a31bfb 100755 --- a/README.md +++ b/README.md @@ -169,6 +169,7 @@ See also: [Performance Test Guide](https://github.com/winlinvip/simple-rtmp-serv * nginx v1.5.0: 139524 lines
## History +* v1.0, 2014-03-22, add ./etc/init.d/srs, refine configure to support make clean then make. * v1.0, 2014-03-21, write pid to ./objs/srs.pid. * v1.0, 2014-03-20, refine hls code, support pure audio HLS. * v1.0, 2014-03-19, add vn/an for FFMPEG to drop video/audio for radio stream. diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index 2aed617a2..06fdfdb9d 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -21,7 +21,7 @@ log_dir ./objs/logs; # the max connections. # if exceed the max connections, server will drop the new connection. # default: 2000 -max_connections 2000; +max_connections 1000; # vhost list, the __defaultVhost__ is the default vhost # for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream. # for which cannot identify the required vhost. diff --git a/trunk/configure b/trunk/configure index 32c7633a0..497235ff6 100755 --- a/trunk/configure +++ b/trunk/configure @@ -194,8 +194,7 @@ help: @echo " utest build the utest for srs" clean: - (rm -f Makefile) - (cd ${SRS_OBJS}; rm -rf ${SRS_BUILD_SUMMARY} srs bandwidth *.hpp srs_utest) + (cd ${SRS_OBJS}; rm -f rm -rf srs bandwidth srs_utest) (cd ${SRS_OBJS}; rm -rf src research include lib utest) (cd research/librtmp; make clean) diff --git a/trunk/etc/init.d/srs b/trunk/etc/init.d/srs new file mode 100755 index 000000000..4e5e5c1cf --- /dev/null +++ b/trunk/etc/init.d/srs @@ -0,0 +1,144 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: simple-rtmp-server(srs) +# RequiRED-Start: $all +# RequiRED-Stop: $all +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: simple-rtmp-server(srs) +# Description: https://github.com/winlinvip/simple-rtmp-server +### END INIT INFO + +RED="\\e[31m" +GREEN="\\e[32m" +YELLOW="\\e[33m" +BLACK="\\e[0m" +POS="\\e[60G" + +# the pid file is generated by install wizard +ROOT="./" +APP="./objs/srs" +CONFIG="./conf/srs.conf" +DEFAULT_PID_FILE='./objs/srs.pid' + +ok_msg(){ + echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]" +} + +failed_msg(){ + echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]" +} + +# load process info of srs +# @set variable $srs_pid to the process id in srs.pid file. +# @return 0, if process exists; otherwise: +# 1, for pid file not exists. +# 2, for get proecess info by pid failed. +# @set variable $error_msg if error. +# @set variable $srs_pid_file to pid file. +load_process_info() { + srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'` + if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi + + srs_pid=`cat $srs_pid_file 2>/dev/null` + ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi + + ps -p ${srs_pid} >/dev/null 2>/dev/null + ret=$?; if [[ 0 -ne $ret ]]; then error_msg="process $srs_pid does not exists"; return 2; fi + + return 0; +} + +start() { + # if exists, exit. + load_process_info + if [[ 0 -eq $? ]]; then + failed_msg "srs started(pid ${srs_pid}), should not start it again." + return 0 + fi + + # try to get log dir. + + # not exists, start server + ok_msg "Starting srs..." + # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000" + # TODO: FIXME: write log to, for instance, the same dir of log. + # TODO: FIXME: support deamon, without nohup. + (cd ${ROOT}; nohup ${APP} -c ${CONFIG} >/dev/null 2>&1 &) + + # check again after start server + load_process_info + if [[ 0 -eq $? ]]; then + ok_msg "srs started(pid ${srs_pid})" + else + failed_msg "srs not started" + fi +} + +stop() { + # not start, exit + load_process_info + if [[ 0 -ne $? ]]; then + failed_msg "srs not start." + return 0 + fi + + ok_msg "Stopping srs(pid ${srs_pid})..." + + # process exists, kill util stop + for((;;)); do + load_process_info + if [[ 0 -eq $? ]]; then + kill -s SIGTERM ${srs_pid} 2>/dev/null + ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi + sleep 0.1 + else + ok_msg "srs stopped" + break; + fi + done + + sleep 0.1 + return 0 +} + +# get the status of srs process +# @return 0 if srs is running; otherwise, 1 for stopped. +status() { + load_process_info + ret=$?; if [[ 0 -eq $ret ]]; then + echo "srs(pid ${srs_pid}) is running." + return 0 + fi + + echo "srs is stopped, $error_msg" + return 1 +} + +menu() { + case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + status) + status + ;; + *) + echo "Usage: $0 {start|stop|status|restart|reload}" + return 1 + ;; + esac +} + +menu $1 + +code=$? +exit ${code} diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index 6e86cf638..443bca091 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -370,8 +370,12 @@ void SrsServer::on_signal(int signo) #endif return; } - - // TODO: handle the SIGINT, SIGTERM. + + if (signo == SIGTERM) { + srs_trace("user terminate program"); + exit(0); + return; + } } void SrsServer::close_listeners() diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 50f9d3632..4583f3f9d 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "0" #define VERSION_MINOR "9" -#define VERSION_REVISION "24" +#define VERSION_REVISION "25" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "srs" diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index c86dc21a0..21c486af8 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -65,6 +65,7 @@ int main(int argc, char** argv) #endif signal(SIGNAL_RELOAD, handler); + signal(SIGTERM, handler); signal(SIGINT, handler); if ((ret = _srs_config->parse_options(argc, argv)) != ERROR_SUCCESS) {