Files
impala/testdata/bin/kill-java-service.sh
Casey Ching e2bfb6ae2f Misc improvements to shell scripts about error reporting
Changes:
  1) Consistently use "set -euo pipefail".
  2) When an error happens, print the file and line.
  3) Consolidated some of the kill scripts.
  4) Added better error messages to the load data script.
  5) Changed use of #!/bin/sh to bash.

Change-Id: I14fef66c46c1b4461859382ba3fd0dee0fbcdce1
Reviewed-on: http://gerrit.cloudera.org:8080/1620
Reviewed-by: Casey Ching <casey@cloudera.com>
Tested-by: Internal Jenkins
2015-12-17 18:25:27 +00:00

61 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2015 Cloudera, Inc. All rights reserved.
set -euo pipefail
trap 'echo Error in $0 at line $LINENO: $(awk "NR == $LINENO" $0)' ERR
CLASSES=()
EXTRA_SHUTDOWN_TIME_SECS=1
while getopts :c:s: OPTION; do
case $OPTION in
c) CLASSES+=($OPTARG);;
s) EXTRA_SHUTDOWN_TIME_SECS=$OPTARG;;
*) echo "Usage: $0 -c <java class name> [-c ...] " \
"[-s <wait time after stopping all processes>]"
exit 1;;
esac
done
if [[ ${#CLASSES[@]} -eq 0 ]]; then
echo At least one class must be given >&2
exit 1
fi
function pid_is_running {
kill -0 $1 &>/dev/null
}
# Waits for 3 seconds for a pid to stop. Returns success if the pid is stopped otherwise
# returns failure.
function wait_for_pid_to_stop {
for I in {1..30}; do
if ! pid_is_running $1; then
return
fi
sleep 0.1
done
return 1
}
NEEDS_EXTRA_WAIT=false
for CLASS in ${CLASSES[@]}; do
PID=$(jps -m | (grep $CLASS || true) | awk '{print $1}')
if [[ -z $PID ]]; then
continue
fi
kill $PID || true # Don't error if the process somehow died on its own.
NEEDS_EXTRA_WAIT=true
if wait_for_pid_to_stop $PID; then
continue
fi
kill -9 $PID || true
if ! wait_for_pid_to_stop $PID; then
echo Unable to stop process $PID running java class $CLASS >&2
exit 1
fi
done
if $NEEDS_EXTRA_WAIT; then
sleep $EXTRA_SHUTDOWN_TIME_SECS
fi