123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #!/bin/bash
- ### BEGIN INIT INFO
- # Provides: ossrs(srs)
- # Required-Start: $all
- # Required-Stop: $all
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: ossrs(srs)
- # Description: https://github.com/ossrs/srs
- ### END INIT INFO
- # the config of ROOT, user must modify it when start srs from other directory,
- # it's ok to use the script by command ./etc/init.d/ossrs
- ROOT="./"
- APP="./objs/srs"
- CONFIG="./conf/demo.conf"
- DEFAULT_PID_FILE='./objs/srs.demo.pid'
- DEFAULT_LOG_FILE='./objs/srs.demo.log'
- ########################################################################
- # utility functions
- ########################################################################
- RED="\\033[31m"
- GREEN="\\033[32m"
- YELLOW="\\033[33m"
- BLACK="\\033[0m"
- POS="\\033[60G"
- 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 $pid_file to pid file.
- load_process_info() {
- # get pid file
- pid_file=`cd ${ROOT} && cat ${CONFIG} |grep ^pid|awk '{print $2}'|awk -F ';' '{print $1}'`
- if [[ -z $pid_file ]]; then pid_file=${DEFAULT_PID_FILE}; fi
- # get abs path
- pid_dir=`dirname $pid_file`
- pid_file=`(cd ${ROOT}; cd $pid_dir; pwd)`/`basename $pid_file`
-
- srs_pid=`cat $pid_file 2>/dev/null`
- ret=$?; if [[ 0 -ne $ret ]]; then error_msg="file $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
-
- # not exists, start server
- ok_msg "Starting SRS..."
-
- # get log file
- log_file=`cd ${ROOT} && cat ${CONFIG} |grep '^log_file'| awk '{print $2}'| awk -F ';' '{print $1}'`
- if [[ -z $log_file ]]; then log_file=${DEFAULT_LOG_FILE}; fi
- # get abs path
- log_dir=`dirname $log_file`
- log_file=`(cd ${ROOT} && cd $log_dir && pwd)`/`basename $log_file`
-
- # TODO: FIXME: set limit by, for instance, "ulimit -HSn 10000"
- if [[ -z $log_file ]]; then
- (cd ${ROOT}; ${APP} -c ${CONFIG} >/dev/null 2>&1)
- else
- (cd ${ROOT}; ${APP} -c ${CONFIG} >> $log_file.sys 2>&1)
- fi
-
- # check again after start server
- for ((i = 0; i < 5; i++)); do
- # sleep a little while, for srs may start then crash.
- sleep 0.1
- load_process_info
- ret=$?; if [[ 0 -ne $ret ]]; then
- failed_msg "SRS start failed";
- failed_msg "see $log_file";
- return $ret;
- fi
- done
-
- # check whether started.
- load_process_info
- ret=$?; if [[ 0 -eq $? ]]; then ok_msg "SRS started(pid ${srs_pid})"; return 0; fi
-
- failed_msg "SRS not started"
- return $ret
- }
- 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
- }
- reload() {
- # not start, exit
- load_process_info
- if [[ 0 -ne $? ]]; then failed_msg "SRS not start."; return 0; fi
-
- ok_msg "Reload SRS(pid ${srs_pid})..."
-
- # process exists, reload it
- kill -s SIGHUP ${srs_pid} 2>/dev/null
- ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "Reload SRS failed ret=$ret"; return $ret; fi
-
- load_process_info
- if [[ 0 -ne $? ]]; then failed_msg "SRS reload failed."; return $ret; fi
-
- ok_msg "SRS reloaded"
- return 0
- }
- menu() {
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- status)
- status
- ;;
- reload)
- reload
- ;;
- *)
- echo "Usage: $0 {start|stop|status|restart|reload}"
- return 1
- ;;
- esac
- }
- menu $1
- code=$?
- exit ${code}
|