Blame view

trunk/etc/init.d/srs-api 3.3 KB
winlin authored
1 2 3 4 5 6 7 8 9
#!/bin/bash

### BEGIN INIT INFO
# Provides:          simple-rtmp-server-api(srs-api)
# RequiRED-Start:    $all
# RequiRED-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: simple-rtmp-server-api(srs-api)
10
# Description:       https://github.com/simple-rtmp-server/srs
winlin authored
11 12 13 14 15 16 17 18 19 20 21
### 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/simple-rtmp-server
ROOT="./"
APP="python ./research/api-server/server.py"
CONFIG="8085"

########################################################################
# utility functions
########################################################################
22 23 24 25 26
RED="\\033[31m"
GREEN="\\033[32m"
YELLOW="\\033[33m"
BLACK="\\033[0m"
POS="\\033[60G"
winlin authored
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

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 deamon, 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}