178 lines
3.5 KiB
Bash
Executable file
178 lines
3.5 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
# qpid.stop Script
|
|
#
|
|
# Script checks for a given pid running DEFAULT_SEARCH and attempts to quit it
|
|
#
|
|
|
|
MAX_ATTEMPTS=2
|
|
SLEEP_DELAY=1
|
|
DEFAULT_SEARCH="PNAME=QPBRKR"
|
|
|
|
if [ -z "$QPID_STOP_SEARCH" ]; then
|
|
SEARCH=$DEFAULT_SEARCH;
|
|
else
|
|
SEARCH=$QPID_STOP_SEARCH;
|
|
fi
|
|
|
|
#
|
|
# Forcably Quit the specified PID($1)
|
|
#
|
|
forceQuit()
|
|
{
|
|
kill -9 $1
|
|
}
|
|
|
|
#
|
|
# Gracefully ask the PID($1) to quit
|
|
#
|
|
quit()
|
|
{
|
|
kill $1
|
|
}
|
|
|
|
#
|
|
# grep for the session ID ($1) and return 0 for successful quit and 1 for process alive
|
|
#
|
|
lookup_pid()
|
|
{
|
|
result=`ps -e | grep $1 | wc -l`
|
|
}
|
|
|
|
#
|
|
# grep ps for all instances of $SEARCH for the current user and collect PIDs
|
|
#
|
|
lookup_all_pids()
|
|
{
|
|
pids=`pgrep -f -U $USER $SEARCH`
|
|
result_all=`echo -n $pids | wc -w`
|
|
}
|
|
|
|
#
|
|
# check that the PID passed in is for a Qpid broker owned by this user and alive
|
|
#
|
|
validate_pid()
|
|
{
|
|
result=`pgrep -fl $SEARCH | grep $1 | wc -l`
|
|
}
|
|
|
|
#
|
|
# Show the PS output for given set of pids
|
|
#
|
|
showPids()
|
|
{
|
|
ps -o user,pid,args -p $pids
|
|
}
|
|
|
|
#
|
|
# Sleep and then check then lookup the PID($1) to ensure it has quit
|
|
#
|
|
check()
|
|
{
|
|
echo "Waiting $SLEEP_DELAY second for $1 to exit"
|
|
sleep $SLEEP_DELAY
|
|
lookup_pid $1
|
|
}
|
|
|
|
#
|
|
# Verify the PID($1) is available
|
|
#
|
|
verifyPid()
|
|
{
|
|
validate_pid $1
|
|
if [[ $[$result] == 1 ]] ; then
|
|
brokerspid=$1
|
|
else
|
|
echo "Unable to locate Qpid Broker Process with PID $1. Check PID and try again."
|
|
exit -1
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Stops all Qpid brokers for current user
|
|
#
|
|
qpid_stopall_brokers()
|
|
{
|
|
for pid in $pids ; do
|
|
lookup_pid $pid;
|
|
brokerspid=$pid;
|
|
stop_broker $pid;
|
|
done
|
|
}
|
|
|
|
#
|
|
# Stops Qpid broker with brokerspid id
|
|
#
|
|
stop_broker()
|
|
{
|
|
# Attempt to quit the process MAX_ATTEMPTS Times
|
|
attempt=0
|
|
while [[ $[$result] > 0 && $[$attempt] < $[$MAX_ATTEMPTS] ]] ; do
|
|
quit $brokerspid
|
|
check $brokerspid
|
|
attempt=$[$attempt + 1]
|
|
done
|
|
|
|
# Check that it has quit
|
|
if [[ $[$result] == 0 ]] ; then
|
|
echo "Process quit"
|
|
else
|
|
|
|
attempt=0
|
|
# Now attempt to force quit the process
|
|
while [[ $[$result] > 0 && $[$attempt] < $[$MAX_ATTEMPTS] ]] ; do
|
|
forceQuit $brokerspid
|
|
check $brokerspid
|
|
attempt=$[$attempt + 1]
|
|
done
|
|
|
|
# Output final status
|
|
if [[ $[$result] > 0 && $[$attempt] == $[$MAX_ATTEMPTS] ]] ; then
|
|
echo "Stopped trying to kill process: $brokerspid"
|
|
echo "Attempted to stop $attempt times"
|
|
else
|
|
echo "Done "
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
#
|
|
# Main Run
|
|
#
|
|
|
|
# Check if we are killing all qpid pids or just one.
|
|
# Now uses local function qpid_stopall_brokers
|
|
if [[ $# == 0 ]] ; then
|
|
lookup_all_pids
|
|
if [[ $[$result_all] > 0 ]] ; then
|
|
echo "Killing All Qpid Brokers for user: '$USER'"
|
|
qpid_stopall_brokers
|
|
else
|
|
echo "No Qpid Brokers found running for user: " $USER
|
|
fi
|
|
exit $result
|
|
else
|
|
verifyPid $1
|
|
stop_broker
|
|
exit $result
|
|
fi
|
|
|