Changeset 2304 in /cluster/svnroot


Ignore:
Timestamp:
Apr 1, 2010 4:04:47 PM (11 years ago)
Author:
fitz
Message:

(#454) rewrite of mpd init script

File:
1 edited

Legend:

Unmodified
Added
Removed
  • bccd-ng/trunk/trees/etc/init.d/mpd

    r2274 r2304  
    1 #!/bin/sh
     1#!/bin/bash
    22
    33### BEGIN INIT INFO
    44# Provides:             mpd
    5 # Required-Start: snmpd
    6 # Required-Stop:       
     5# Required-Start:
     6# Required-Stop:
    77# Default-Start:        2 4 5
    88# Default-Stop:         0 1 6
    9 # Short-Description: Start MPICH Process Manager Daemon
     9# Short-Description: Start MPICH Process Daemon
     10# Description:       MPD (MPICH Process Daemon) is the daemon that manages
     11#                    distribution of MPI processes compiled and run with
     12#                    MPICH2. This init script has been written to help
     13#                    manage MPD on the BCCD (http://bccd.net).
    1014### END INIT INFO
    1115
     
    1519
    1620NAME=mpd
    17 DAEMON=/bccd/software/mpich2-1.2.1/bin/mpd
     21MPICH_BIN=/bccd/software/mpich2/bin
     22DAEMON=$MPICH_BIN/$NAME
     23MPDEXIT="$MPICH_BIN/mpdexit localmpd"
    1824PIDFILE=/var/run/mpd.pid
    1925CFGFILE=/etc/mpd.conf
    20 HEADNODE=node000.bccd.net
     26PORTFILE=/etc/snmp/mpd.port
     27NCPUS=`grep ^processor /proc/cpuinfo | wc -l`
     28
     29if [ "`cat /etc/bccd-stage`" == "LIBERATED" ]; then
     30        HEADNODE=pxenode000.bccd.net
     31else
     32        HEADNODE=node000.bccd.net
     33fi
    2134
    2235test -x $DAEMON || exit 5
    2336
    24 function start_mpd {
    25         if test "`hostname`" == "$HEADNODE"; then
     37function head_start {
     38        unset PORT
     39
     40        # if we've already found a port, don't try again
     41        # but check it anyways just for good measure
     42        if test -f $PORTFILE; then
     43                PORT=`cat $PORTFILE`
     44                /bin/nc -z localhost $PORT
     45                # unset PORT if it's now used
     46                test $? == 0 && unset PORT
     47        fi
     48
     49        if ! test $PORT; then
     50                # $RANDOM gives an integer between 0 and 32767
     51                # ... add 32767 to get a high port number.
    2652                PORT=$(($RANDOM+32767))
     53
     54                # Test availability of that port and keep trying
     55                # until we get an open one
    2756                /bin/nc -z localhost $PORT
    28 
    2957                while [ $? -eq 0 ]; do
    3058                        PORT=$(($RANDOM+32767))
    3159                        /bin/nc -z localhost $PORT
    3260                done
    33                 echo $PORT > /etc/snmp/mpd.port
    3461
    35                 start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- --pid=$PIDFILE --daemon --ncpus=$NCPUS --listenport=$PORT
     62                echo $PORT > $PORTFILE
     63        fi
     64
     65        chmod 600 $CFGFILE
     66        start-stop-daemon --start --quiet --oknodo \
     67                --pidfile $PIDFILE --startas $DAEMON -- \
     68                --pid=$PIDFILE --daemon --ncpus=$NCPUS --listenport=$PORT
     69        status=$?
     70        chmod 644 $CFGFILE
     71
     72        return $status
     73}
     74
     75function compute_start {
     76        PORT=`snmpget -OQv -c public -v 1 $HEADNODE \
     77                .1.3.6.1.4.1.2021.84.4.1.2.8.109.112.100.95.112.111.114.116.1 \
     78                | sed -e 's!"!!g'`
     79
     80        chmod 600 $CFGFILE
     81        start-stop-daemon --start --quiet --oknodo \
     82                --pidfile $PIDFILE --startas $DAEMON -- \
     83                --pid=$PIDFILE --daemon --ncpus=$NCPUS --host=$HEADNODE --port=$PORT
     84        status=$?
     85        chmod 644 $CFGFILE
     86
     87        return $status
     88}
     89
     90function start_mpd {
     91        # matches node000.bccd.net AND pxenode000.bccd.net
     92        if [[ "`hostname`" =~ node000 ]]; then
     93                head_start
     94                return $?
    3695        else
    37                 PORT=`snmpget -OQv -c public -v 1 $HEADNODE .1.3.6.1.4.1.2021.84.4.1.2.8.109.112.100.95.112.111.114.116.1|sed -e 's!"!!g'`
    38                 start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- --pid=$PIDFILE --daemon --ncpus=$NCPUS --host=$HEADNODE --port=$PORT
     96                compute_start
     97                return $?
    3998        fi
    4099}
     
    42101case $1 in
    43102        start)
    44                 log_daemon_msg "Starting MPD server" "mpd"
    45                 NCPUS=`grep ^processor /proc/cpuinfo | wc -l`
    46                 chmod 600 $CFGFILE
     103                test $UID == 0 || { log_failure_msg "Must be root!" && exit 4; }
     104
     105                $0 status &> /dev/null
     106                test $? == 0 && { log_success_msg "MPD server already running" && exit 0; }
     107
     108                log_daemon_msg "Starting MPD server"
    47109                start_mpd
    48                 chmod 644 $CFGFILE
    49110                status=$?
     111
     112                log_progress_msg "mpd"
    50113                log_end_msg $status
    51114                ;;
    52115        stop)
    53                 log_daemon_msg "Stopping MPD server" "mpd"
    54                 start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
    55                 log_end_msg $?
    56                 rm -f $PIDFILE
     116                test $UID == 0 || { log_failure_msg "Must be root!" && exit 4; }
     117
     118                $0 status &> /dev/null
     119                test $? != 0 && { log_success_msg "No MPD server running" && exit 0; }
     120
     121                log_daemon_msg "Stopping MPD server"
     122                chmod 600 $CFGFILE
     123                $MPDEXIT
     124                status=$?
     125                chmod 644 $CFGFILE
     126
     127                log_progress_msg "mpd"
     128               
     129                rm -f $PIDFILE &> /dev/null
     130                log_end_msg $status
    57131                ;;
    58         restart)
    59                 $0 stop && sleep 2 && $0 start
     132        restart | force-reload)
     133                $0 stop; sleep 1; $0 start
    60134                ;;
    61135        status)
    62                 pidofproc -p $PIDFILE $DAEMON > /dev/null
     136                pidofproc -p $PIDFILE $DAEMON &> /dev/null
    63137                status=$?
    64138                if [ $status -eq 0 ]; then
     
    70144                ;;
    71145        *)
    72                 echo "Usage: $0 {start|stop|restart|status}"
     146                echo "Usage: $0 {start|stop|restart|force-reload|status}"
    73147                exit 2
    74148                ;;
Note: See TracChangeset for help on using the changeset viewer.