~ivantis/armagetronad/sty+ct+ivantis

« back to all changes in this revision

Viewing changes to batch/rcd_startstop

  • Committer: ivantis
  • Date: 2008-09-09 21:33:18 UTC
  • Revision ID: ivantis@ivantis.net-20080909213318-k43y6yuq0zd6wbsa
first commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Common start-stop code for server and master server
 
2
 
 
3
# determine required su command
 
4
[ X"${user}" = X"${USER}" ] || SU="su ${user} -c"
 
5
 
 
6
# create directories writable by user
 
7
[ -d ${VARDIR} ] || mkdir -p ${VARDIR}
 
8
[ -d ${LOGDIR} ] || mkdir -p ${LOGDIR}
 
9
[ -d ${PIDDIR} ] || mkdir -p ${PIDDIR}
 
10
chown -R "${user}" ${VARDIR}
 
11
 
 
12
# export PIDDIR and VARDIR for service starter script
 
13
export PIDDIR
 
14
export VARDIR
 
15
 
 
16
# ps command listing all PIDs
 
17
PS="ps -a"
 
18
 
 
19
# return codes
 
20
[ -n "${rc_done}" ] || rc_done=" done."
 
21
[ -n "${rc_failed}" ] || rc_failed=" failed."
 
22
 
 
23
# The echo return value for success (defined in /etc/rc.config).
 
24
return=${rc_done}
 
25
case "$1" in
 
26
    start)
 
27
    if $0 status > /dev/null 2>&1; then
 
28
        echo "armagetronad ${TYPE} not started, already running."
 
29
        exit 1
 
30
    fi
 
31
    rm -f ${MAINPIDFILE} ${STARTERPIDFILE}
 
32
    touch -f ${MAINPIDFILE} ${STARTERPIDFILE}
 
33
    echo -n "Starting armagetronad ${TYPE}..."
 
34
        if [ X"${user}" = X"${USER}" ]; then
 
35
                { nohup ${BINFILE} ${server_args} >> ${LOGFILE} 2>&1 & } > /dev/null 2>&1 
 
36
                rm -f nohup.out
 
37
        else
 
38
                chown "${user}" ${MAINPIDFILE} ${STARTERPIDFILE}
 
39
                { nohup ${SU} "${BINFILE} ${server_args}" >> ${LOGFILE} 2>&1 & } > /dev/null 2>&1 
 
40
                rm -f nohup.out
 
41
        fi
 
42
        COUNT=10
 
43
        while [ ${COUNT} -gt 0 ]; do
 
44
                [ -s ${MAINPIDFILE} ] && COUNT=0 || sleep 1
 
45
                COUNT=`expr ${COUNT} - 1`
 
46
        done
 
47
        [ -s ${MAINPIDFILE} ] || return=${rc_failed}
 
48
        echo -e "${return}"
 
49
    if [ X"${niceness_level}" != X"" -a X"${niceness_level}" != X"0" ]; then
 
50
        renice ${niceness_level} -p `cat ${MAINPIDFILE}`    > /dev/null
 
51
        renice ${niceness_level} -p `cat ${STARTERPIDFILE}` > /dev/null
 
52
    fi
 
53
        ;;
 
54
    stop)
 
55
        echo -n "Shutting down armagetronad ${TYPE}..."
 
56
        MAINPID=""
 
57
        STARTERPID=""
 
58
        [ -s ${MAINPIDFILE} ] && MAINPID=$( cat ${MAINPIDFILE} ) || return=${rc_failed}
 
59
        [ -s ${STARTERPIDFILE} ] && STARTERPID=$( cat ${STARTERPIDFILE} ) || return=${rc_failed}
 
60
        [ -n "${STARTERPID}" ] && kill -TERM ${STARTERPID} || return=${rc_failed}
 
61
        [ -n "${MAINPID}" ] && kill -TERM ${MAINPID} || return=${rc_failed}
 
62
        rm -f ${STARTERPIDFILE}
 
63
        rm -f ${MAINPIDFILE}
 
64
 
 
65
        echo -e "${return}"
 
66
        ;;
 
67
    reload)
 
68
    kill -HUP `cat ${MAINPIDFILE}`
 
69
    ;;
 
70
    restart)
 
71
        $0 stop  ;  sleep 1 ; $0 start  || return=${rc_failed}
 
72
        ;;
 
73
    status)
 
74
        echo -n "Checking for service armagetronad ${TYPE}: "
 
75
 
 
76
        RESPONSE=OK
 
77
        [ -s ${STARTERPIDFILE} ] || RESPONSE="Not running"
 
78
        [ X"$RESPONSE" = X"OK" ] && { [ -s ${MAINPIDFILE} ] || RESPONSE="Inconsistent. Starter PID logged, but server PID missing"; }
 
79
        [ X"$RESPONSE" = X"OK" ] && { ${PS} | grep $(cat ${STARTERPIDFILE}) >/dev/null || RESPONSE="Inconsistent. PIDs logged, but no service running"; }
 
80
        [ X"$RESPONSE" = X"OK" ] && { ${PS} | grep $(cat ${MAINPIDFILE}) >/dev/null || RESPONSE="Inconsistent. PIDs logged, starter is running, but server is missing."; }
 
81
        
 
82
        echo ${RESPONSE}
 
83
        [ X"${RESPONSE}" = X"OK" ] || exit 1
 
84
        exit 0
 
85
        ;;
 
86
    log)
 
87
        tail -f ${LOGFILE}
 
88
        ;;
 
89
    *)
 
90
        echo "Usage: $0 {start|stop|reload|status|restart|log}"
 
91
        exit 1
 
92
esac
 
93
 
 
94
# Inform the caller not only verbosely and set an exit status.
 
95
test "${return}" = "${rc_done}" || exit 1
 
96
exit 0