#! /bin/sh # # Copyright(c) 2013-2016, Wind River Systems, Inc. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Wind River Systems nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Assumes that LSB (Linux Standard Base) scripts are available. On Fedora and # other Red Hat related distros, the redhat-lsb package is optional. if [ -f /etc/init.d/functions ] then . /etc/init.d/functions else . /lib/lsb/init-functions fi # LSB Exit Codes # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess arguments # 3 - unimplemented feature # 4 - user had insufficient privileges # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # # LSB Exit Status Codes # 0 - program is running or service OK # 1 - program is dead and /var/run pid file exists # 2 - program is dead and /var/lock lock file exists # 3 - program is not running # 4 - program or service status is unknown # RETVAL=0 # Update binary location and device to be used, if necessary. GUEST_CLIENT_NAME="guest-client" GUEST_CLIENT_PIDFILE="/var/run/${GUEST_CLIENT_NAME}.pid" GUEST_CLIENT="/usr/local/bin/${GUEST_CLIENT_NAME}" GUEST_CLIENT_DEVICE="/dev/virtio-ports/cgcs.heartbeat" if [ ! -e "${GUEST_CLIENT}" ] then echo "${GUEST_CLIENT} is missing" exit 5 fi PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin case "$1" in start) args="" if [ -n ${GUEST_CLIENT_DEVICE} ] then args="--device ${GUEST_CLIENT_DEVICE}" fi echo -n "Starting ${GUEST_CLIENT_NAME}: " if [ -n "`pidof ${GUEST_CLIENT}`" ] then # Something might have started guest-client already. RETVAL=0 else start-stop-daemon --start --background --make-pidfile --pidfile ${GUEST_CLIENT_PIDFILE} --exec ${GUEST_CLIENT} -- ${args} RETVAL=$? fi if [ ${RETVAL} -eq 0 ] then echo "OK" else echo "FAIL" RETVAL=1 fi ;; stop) echo -n "Stopping ${GUEST_CLIENT_NAME}: " if [ -n "`pidof ${GUEST_CLIENT}`" ] then killproc ${GUEST_CLIENT} fi SHUTDOWN_TIMEOUT=10 count=0 while [ ${count} -lt ${SHUTDOWN_TIMEOUT} ] do pidof ${GUEST_CLIENT} &> /dev/null rc=$? if [ ${rc} -eq 1 ] then echo "OK" break fi count=`expr ${count} + 1` sleep 1 done pidof ${GUEST_CLIENT} &> /dev/null rc=$? if [ ${rc} -eq 0 ] then echo "FAIL" RETVAL=1 fi rm -f ${GUEST_CLIENT_PIDFILE} ;; status) pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` if [ -n "${pid}" ] then if ps -p ${pid} &>/dev/null then echo "${GUEST_CLIENT_NAME} is running" RETVAL=0 else echo "${GUEST_CLIENT_NAME} is not running but has pid file" RETVAL=1 fi else echo "${GUEST_CLIENT_NAME} is not running" RETVAL=3 fi ;; restart) $0 stop sleep 1 $0 start ;; reload) pid=`cat ${GUEST_CLIENT_PIDFILE} 2>/dev/null` if [ -n "${pid}" ] then echo "${GUEST_CLIENT_NAME} reload" kill -HUP ${pid} fi ;; *) echo "usage: $0 { start | stop | status | restart | reload }" ;; esac exit ${RETVAL}