#!/bin/bash ### BEGIN INIT INFO # Provides: ossrs-api(srs-api) # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: ossrs-api(srs-api) # 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="python ./research/api-server/server.py" CONFIG="8085" ######################################################################## # 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-api # @set variable $srs_api_id to the process id. # @return 0, if process exists; otherwise: # 1, for srs-api not exists. # @set variable $error_msg if error. load_process_info() { srs_api_id=`ps aux|grep python|grep research|grep "api-server"|awk '{print $2}'` if [[ -z $srs_api_id ]]; then error_msg="srs-api process does not exists"; return 1; fi return 0; } start() { # if exists, exit. load_process_info if [[ 0 -eq $? ]]; then failed_msg "SRS-api started(pid ${srs_api_id}), should not start it again."; return 0; fi # not exists, start server ok_msg "Starting SRS-api..." # 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 daemon, without nohup. (cd ${ROOT}; nohup ${APP} ${CONFIG} >/dev/null 2>&1 &) # check again after start server load_process_info ret=$?; if [[ 0 -eq $? ]]; then ok_msg "SRS-api started(pid ${srs_api_id})"; return 0; fi failed_msg "SRS-api not started" return $ret } stop() { # not start, exit load_process_info if [[ 0 -ne $? ]]; then failed_msg "SRS-api not start."; return 0; fi ok_msg "Stopping SRS-api(pid ${srs_api_id})..." # process exists, kill util stop for((;;)); do load_process_info if [[ 0 -eq $? ]]; then kill -s SIGKILL ${srs_api_id} 2>/dev/null ret=$?; if [[ 0 -ne $ret ]]; then failed_msg "send signal SIGKILL failed ret=$ret"; return $ret; fi sleep 0.1 else ok_msg "SRS-api stopped" break; fi done sleep 0.1 return 0 } # get the status of srs-api process # @return 0 if srs-api is running; otherwise, 1 for stopped. status() { load_process_info ret=$?; if [[ 0 -eq $ret ]]; then echo "SRS-api(pid ${srs_api_id}) is running."; return 0; fi echo "SRS-api is stopped" return 1 } menu() { case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $0 {start|stop|status|restart}" return 1 ;; esac } menu $1 code=$? exit ${code}