/etc/init.d # cat /etc/opt/init.d/vmware-vpxa
#!/bin/sh
#
# Copyright 2005 VMware, Inc. All rights reserved.
#
# vmware-vpxa Start/Stop the VMware VirtualCenter Agent
#
#
platform=`/bin/uname -s`
if [ X$platform = XVMkernel ] # VMVisor
then
SCHED_PARAM="++min=0,swap,group=vpxa"
else
SCHED_PARAM=
fi
# Basic support for IRIX style chkconfig
# chkconfig: 345 31 69
# description: starts up VirtualCenter management agent.
# load system helper functions.
if [ -f /etc/init.d/functions ]
then
. /etc/init.d/functions
else
# non-rh systems don't have functions.
echo_failure() { echo "failed"; }
echo_success() { echo "success"; }
fi
watchdog=/opt/vmware/vpxa/bin/vmware-watchdog
pidfile=/var/run/vmware/vmware-vpxa.PID
cd /opt/vmware/vpxa/bin
get_vpxa_pid() {
if type pidof >/dev/null 2>&1
then
pidof vpxa
elif [ X$platform = XVMkernel ] # VMVisor
then
ps | grep vpxa | head -n 1 | awk '{print $1}'
fi
}
start_vpxa() {
if $watchdog -r vpxa > /dev/null 2>&1 ; then
echo -n " (vmware-vpxa is already running)"
return 1
else
setsid $watchdog -s vpxa -u 30 -q 5 "/opt/vmware/vpxa/sbin/vpxa $SCHED_PARAM" > /dev/null 2>&1 &
fi
# Wait for a second to give things a chance to start off.
MAX_ATTEMPTS=10
local attempts=0
local vpxapid=`get_vpxa_pid`
while [ "$vpxapid" = '' ]
do
if [ $attempts -gt $MAX_ATTEMPTS ] ; then
return 1
fi
sleep 1
vpxapid=`get_vpxa_pid`
attempts=$((attempts+1))
done
if [ "$vpxapid" != '' ]; then
return 0
else
return 1
fi
}
stop_vpxa() {
local vpxapid=`get_vpxa_pid`
# Kill the watchdog.
$watchdog -k vpxa > /dev/null 2>&1
# Kill vpxa.
kill -TERM $vpxapid > /dev/null 2>&1
# Wait a second, to give things a chance to either die or
# restart (if the watchdog is still up for some reason).
sleep 1
# Now we must make sure things died.
local attempts=0
MAX_ATTEMPTS=10
while [ "$vpxapid" != '' ]
do
# If we've already tried a bunch of times,
# just give up and print an error message.
if [ $attempts -gt $MAX_ATTEMPTS ] ; then
return 1
fi
# Retry to kill the watchdog, just for completeness.
# It may already be dead.
$watchdog -k vpxa > /dev/null 2>&1
# Send vpxa a KILL signal to show we're serious.
kill -KILL $vpxapid > /dev/null 2>&1
sleep 1
vpxapid=`get_vpxa_pid`
attempts=$((attempts+1))
done
# Remove the PID file
rm -f $pidfile
return 0
}
status_vpxa() {
if $watchdog -r vpxa > /dev/null 2>&1 ; then
echo "vmware-vpxa is running"
return 0
else
echo "vmware-vpxa is stopped"
return 1
fi
}
VPXA_RC=0
case $1 in
start)
echo -n "Starting vmware-vpxa:"
start_vpxa
VPXA_RC=$?
if [ "$VPXA_RC" -gt 0 ]; then
echo_failure
else
echo_success
fi
echo
;;
stop)
echo -n "Stopping vmware-vpxa:"
stop_vpxa
VPXA_RC=$?
if [ "$VPXA_RC" -gt 0 ]; then
echo_failure
else
echo_success
fi
echo
;;
status)
status_vpxa
VPXA_RC=$?
;;
restart)
$0 stop
$0 start
VPXA_RC=$?
;;
*)
echo "Usage: `basename "$0"` {start|stop|status|restart}"
exit 1
esac
exit $VPXA_RC