# Common start-stop code for server and master server # determine required su command [ X"${user}" = X"${USER}" ] || SU="su ${user} -c" # create directories writable by user [ -d ${VARDIR} ] || mkdir -p ${VARDIR} [ -d ${LOGDIR} ] || mkdir -p ${LOGDIR} [ -d ${PIDDIR} ] || mkdir -p ${PIDDIR} chown -R "${user}" ${VARDIR} # export PIDDIR and VARDIR for service starter script export PIDDIR export VARDIR # ps command listing all PIDs PS="ps -a" # return codes [ -n "${rc_done}" ] || rc_done=" done." [ -n "${rc_failed}" ] || rc_failed=" failed." # The echo return value for success (defined in /etc/rc.config). return=${rc_done} case "$1" in start) if $0 status > /dev/null 2>&1; then echo "@prognamebase@ ${TYPE} not started, already running." exit 1 fi rm -f ${MAINPIDFILE} ${STARTERPIDFILE} touch -f ${MAINPIDFILE} ${STARTERPIDFILE} echo -n "Starting @prognamebase@ ${TYPE}..." if [ X"${user}" = X"${USER}" ]; then { nohup ${BINFILE} ${server_args} >> ${LOGFILE} 2>&1 & } > /dev/null 2>&1 rm -f nohup.out else chown "${user}" ${MAINPIDFILE} ${STARTERPIDFILE} { nohup ${SU} "${BINFILE} ${server_args}" >> ${LOGFILE} 2>&1 & } > /dev/null 2>&1 rm -f nohup.out fi COUNT=10 while [ ${COUNT} -gt 0 ]; do [ -s ${MAINPIDFILE} ] && COUNT=0 || sleep 1 COUNT=`expr ${COUNT} - 1` done [ -s ${MAINPIDFILE} ] || return=${rc_failed} echo -e "${return}" if [ X"${niceness_level}" != X"" -a X"${niceness_level}" != X"0" ]; then renice ${niceness_level} -p `cat ${MAINPIDFILE}` > /dev/null renice ${niceness_level} -p `cat ${STARTERPIDFILE}` > /dev/null fi ;; stop) echo -n "Shutting down @prognamebase@ ${TYPE}..." MAINPID="" STARTERPID="" [ -s ${MAINPIDFILE} ] && MAINPID=$( cat ${MAINPIDFILE} ) || return=${rc_failed} [ -s ${STARTERPIDFILE} ] && STARTERPID=$( cat ${STARTERPIDFILE} ) || return=${rc_failed} [ -n "${STARTERPID}" ] && kill -TERM ${STARTERPID} || return=${rc_failed} [ -n "${MAINPID}" ] && kill -TERM ${MAINPID} || return=${rc_failed} rm -f ${STARTERPIDFILE} rm -f ${MAINPIDFILE} echo -e "${return}" ;; reload) kill -HUP `cat ${MAINPIDFILE}` ;; restart) $0 stop ; sleep 1 ; $0 start || return=${rc_failed} ;; status) echo -n "Checking for service @prognamebase@ ${TYPE}: " RESPONSE=OK [ -s ${STARTERPIDFILE} ] || RESPONSE="Not running" [ X"$RESPONSE" = X"OK" ] && { [ -s ${MAINPIDFILE} ] || RESPONSE="Inconsistent. Starter PID logged, but server PID missing"; } [ X"$RESPONSE" = X"OK" ] && { ${PS} | grep $(cat ${STARTERPIDFILE}) >/dev/null || RESPONSE="Inconsistent. PIDs logged, but no service running"; } [ X"$RESPONSE" = X"OK" ] && { ${PS} | grep $(cat ${MAINPIDFILE}) >/dev/null || RESPONSE="Inconsistent. PIDs logged, starter is running, but server is missing."; } echo ${RESPONSE} [ X"${RESPONSE}" = X"OK" ] || exit 1 exit 0 ;; log) tail -f ${LOGFILE} ;; *) echo "Usage: $0 {start|stop|reload|status|restart|log}" exit 1 esac # Inform the caller not only verbosely and set an exit status. test "${return}" = "${rc_done}" || exit 1 exit 0