winlin

add ./etc/init.d/srs, refine configure to support make clean then make.

@@ -169,6 +169,7 @@ See also: [Performance Test Guide](https://github.com/winlinvip/simple-rtmp-serv @@ -169,6 +169,7 @@ See also: [Performance Test Guide](https://github.com/winlinvip/simple-rtmp-serv
169 * nginx v1.5.0: 139524 lines <br/> 169 * nginx v1.5.0: 139524 lines <br/>
170 170
171 ## History 171 ## History
  172 +* v1.0, 2014-03-22, add ./etc/init.d/srs, refine configure to support make clean then make.
172 * v1.0, 2014-03-21, write pid to ./objs/srs.pid. 173 * v1.0, 2014-03-21, write pid to ./objs/srs.pid.
173 * v1.0, 2014-03-20, refine hls code, support pure audio HLS. 174 * v1.0, 2014-03-20, refine hls code, support pure audio HLS.
174 * v1.0, 2014-03-19, add vn/an for FFMPEG to drop video/audio for radio stream. 175 * v1.0, 2014-03-19, add vn/an for FFMPEG to drop video/audio for radio stream.
@@ -21,7 +21,7 @@ log_dir ./objs/logs; @@ -21,7 +21,7 @@ log_dir ./objs/logs;
21 # the max connections. 21 # the max connections.
22 # if exceed the max connections, server will drop the new connection. 22 # if exceed the max connections, server will drop the new connection.
23 # default: 2000 23 # default: 2000
24 -max_connections 2000; 24 +max_connections 1000;
25 # vhost list, the __defaultVhost__ is the default vhost 25 # vhost list, the __defaultVhost__ is the default vhost
26 # for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream. 26 # for example, user use ip to access the stream: rtmp://192.168.1.2/live/livestream.
27 # for which cannot identify the required vhost. 27 # for which cannot identify the required vhost.
@@ -194,8 +194,7 @@ help: @@ -194,8 +194,7 @@ help:
194 @echo " utest build the utest for srs" 194 @echo " utest build the utest for srs"
195 195
196 clean: 196 clean:
197 - (rm -f Makefile)  
198 - (cd ${SRS_OBJS}; rm -rf ${SRS_BUILD_SUMMARY} srs bandwidth *.hpp srs_utest) 197 + (cd ${SRS_OBJS}; rm -f rm -rf srs bandwidth srs_utest)
199 (cd ${SRS_OBJS}; rm -rf src research include lib utest) 198 (cd ${SRS_OBJS}; rm -rf src research include lib utest)
200 (cd research/librtmp; make clean) 199 (cd research/librtmp; make clean)
201 200
  1 +#!/bin/bash
  2 +
  3 +### BEGIN INIT INFO
  4 +# Provides: simple-rtmp-server(srs)
  5 +# RequiRED-Start: $all
  6 +# RequiRED-Stop: $all
  7 +# Default-Start: 2 3 4 5
  8 +# Default-Stop: 0 1 6
  9 +# Short-Description: simple-rtmp-server(srs)
  10 +# Description: https://github.com/winlinvip/simple-rtmp-server
  11 +### END INIT INFO
  12 +
  13 +RED="\\e[31m"
  14 +GREEN="\\e[32m"
  15 +YELLOW="\\e[33m"
  16 +BLACK="\\e[0m"
  17 +POS="\\e[60G"
  18 +
  19 +# the pid file is generated by install wizard
  20 +ROOT="./"
  21 +APP="./objs/srs"
  22 +CONFIG="./conf/srs.conf"
  23 +DEFAULT_PID_FILE='./objs/srs.pid'
  24 +
  25 +ok_msg(){
  26 + echo -e "${1}${POS}${BLACK}[${GREEN} OK ${BLACK}]"
  27 +}
  28 +
  29 +failed_msg(){
  30 + echo -e "${1}${POS}${BLACK}[${RED}FAILED${BLACK}]"
  31 +}
  32 +
  33 +# load process info of srs
  34 +# @set variable $srs_pid to the process id in srs.pid file.
  35 +# @return 0, if process exists; otherwise:
  36 +# 1, for pid file not exists.
  37 +# 2, for get proecess info by pid failed.
  38 +# @set variable $error_msg if error.
  39 +# @set variable $srs_pid_file to pid file.
  40 +load_process_info() {
  41 + srs_pid_file=`cat ${ROOT}/${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'`
  42 + if [[ -z $srs_pid_file ]]; then srs_pid_file=${DEFAULT_PID_FILE}; fi
  43 +
  44 + srs_pid=`cat $srs_pid_file 2>/dev/null`
  45 + ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $srs_pid_file does not exists"; return 1; fi
  46 +
  47 + ps -p ${srs_pid} >/dev/null 2>/dev/null
  48 + ret=$?; if [[ 0 -ne $ret ]]; then error_msg="process $srs_pid does not exists"; return 2; fi
  49 +
  50 + return 0;
  51 +}
  52 +
  53 +start() {
  54 + # if exists, exit.
  55 + load_process_info
  56 + if [[ 0 -eq $? ]]; then
  57 + failed_msg "srs started(pid ${srs_pid}), should not start it again."
  58 + return 0
  59 + fi
  60 +
  61 + # try to get log dir.
  62 +
  63 + # not exists, start server
  64 + ok_msg "Starting srs..."
  65 + # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000"
  66 + # TODO: FIXME: write log to, for instance, the same dir of log.
  67 + # TODO: FIXME: support deamon, without nohup.
  68 + (cd ${ROOT}; nohup ${APP} -c ${CONFIG} >/dev/null 2>&1 &)
  69 +
  70 + # check again after start server
  71 + load_process_info
  72 + if [[ 0 -eq $? ]]; then
  73 + ok_msg "srs started(pid ${srs_pid})"
  74 + else
  75 + failed_msg "srs not started"
  76 + fi
  77 +}
  78 +
  79 +stop() {
  80 + # not start, exit
  81 + load_process_info
  82 + if [[ 0 -ne $? ]]; then
  83 + failed_msg "srs not start."
  84 + return 0
  85 + fi
  86 +
  87 + ok_msg "Stopping srs(pid ${srs_pid})..."
  88 +
  89 + # process exists, kill util stop
  90 + for((;;)); do
  91 + load_process_info
  92 + if [[ 0 -eq $? ]]; then
  93 + kill -s SIGTERM ${srs_pid} 2>/dev/null
  94 + ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGTERM failed ret=$ret"; return $ret; fi
  95 + sleep 0.1
  96 + else
  97 + ok_msg "srs stopped"
  98 + break;
  99 + fi
  100 + done
  101 +
  102 + sleep 0.1
  103 + return 0
  104 +}
  105 +
  106 +# get the status of srs process
  107 +# @return 0 if srs is running; otherwise, 1 for stopped.
  108 +status() {
  109 + load_process_info
  110 + ret=$?; if [[ 0 -eq $ret ]]; then
  111 + echo "srs(pid ${srs_pid}) is running."
  112 + return 0
  113 + fi
  114 +
  115 + echo "srs is stopped, $error_msg"
  116 + return 1
  117 +}
  118 +
  119 +menu() {
  120 + case "$1" in
  121 + start)
  122 + start
  123 + ;;
  124 + stop)
  125 + stop
  126 + ;;
  127 + restart)
  128 + stop
  129 + start
  130 + ;;
  131 + status)
  132 + status
  133 + ;;
  134 + *)
  135 + echo "Usage: $0 {start|stop|status|restart|reload}"
  136 + return 1
  137 + ;;
  138 + esac
  139 +}
  140 +
  141 +menu $1
  142 +
  143 +code=$?
  144 +exit ${code}
@@ -370,8 +370,12 @@ void SrsServer::on_signal(int signo) @@ -370,8 +370,12 @@ void SrsServer::on_signal(int signo)
370 #endif 370 #endif
371 return; 371 return;
372 } 372 }
373 -  
374 - // TODO: handle the SIGINT, SIGTERM. 373 +
  374 + if (signo == SIGTERM) {
  375 + srs_trace("user terminate program");
  376 + exit(0);
  377 + return;
  378 + }
375 } 379 }
376 380
377 void SrsServer::close_listeners() 381 void SrsServer::close_listeners()
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR "0" 32 #define VERSION_MAJOR "0"
33 #define VERSION_MINOR "9" 33 #define VERSION_MINOR "9"
34 -#define VERSION_REVISION "24" 34 +#define VERSION_REVISION "25"
35 #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION 35 #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
36 // server info. 36 // server info.
37 #define RTMP_SIG_SRS_KEY "srs" 37 #define RTMP_SIG_SRS_KEY "srs"
@@ -65,6 +65,7 @@ int main(int argc, char** argv) @@ -65,6 +65,7 @@ int main(int argc, char** argv)
65 #endif 65 #endif
66 66
67 signal(SIGNAL_RELOAD, handler); 67 signal(SIGNAL_RELOAD, handler);
  68 + signal(SIGTERM, handler);
68 signal(SIGINT, handler); 69 signal(SIGINT, handler);
69 70
70 if ((ret = _srs_config->parse_options(argc, argv)) != ERROR_SUCCESS) { 71 if ((ret = _srs_config->parse_options(argc, argv)) != ERROR_SUCCESS) {