hbase/bin/chaos-daemon.sh

141 lines
3.6 KiB
Bash

#!/usr/bin/env 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.
# */
#
usage="Usage: chaos-daemon.sh (start|stop) chaosagent"
# if no args specified, show usage
if [ $# -le 1 ]; then
echo "$usage"
exit 1
fi
# get arguments
startStop=$1
shift
command=$1
shift
check_before_start(){
#ckeck if the process is not running
mkdir -p "$HBASE_PID_DIR"
if [ -f "$CHAOS_PID" ]; then
if kill -0 "$(cat "$CHAOS_PID")" > /dev/null 2>&1; then
echo "$command" running as process "$(cat "$CHAOS_PID")". Stop it first.
exit 1
fi
fi
}
bin=`dirname "${BASH_SOURCE-$0}"`
bin=$(cd "$bin">/dev/null || exit; pwd)
. "$bin"/hbase-config.sh
. "$bin"/hbase-common.sh
CLASSPATH=$HBASE_CONF_DIR
for f in ../lib/*.jar; do
CLASSPATH=${CLASSPATH}:$f
done
# get log directory
if [ "$HBASE_LOG_DIR" = "" ]; then
export HBASE_LOG_DIR="$HBASE_HOME/logs"
fi
if [ "$HBASE_PID_DIR" = "" ]; then
HBASE_PID_DIR=/tmp
fi
if [ "$HBASE_IDENT_STRING" = "" ]; then
export HBASE_IDENT_STRING="$USER"
fi
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
if [ "$JAVA_HOME" = "" ]; then
echo "Error: JAVA_HOME is not set."
exit 1
fi
export HBASE_LOG_PREFIX=hbase-$HBASE_IDENT_STRING-$command-$HOSTNAME
export CHAOS_LOGFILE=$HBASE_LOG_PREFIX.log
if [ -z "${HBASE_ROOT_LOGGER}" ]; then
export HBASE_ROOT_LOGGER=${HBASE_ROOT_LOGGER:-"INFO,RFA"}
fi
if [ -z "${HBASE_SECURITY_LOGGER}" ]; then
export HBASE_SECURITY_LOGGER=${HBASE_SECURITY_LOGGER:-"INFO,RFAS"}
fi
CHAOS_LOGLOG=${CHAOS_LOGLOG:-"${HBASE_LOG_DIR}/${CHAOS_LOGFILE}"}
CHAOS_PID=$HBASE_PID_DIR/hbase-$HBASE_IDENT_STRING-$command.pid
if [ -z "$CHAOS_JAVA_OPTS" ]; then
CHAOS_JAVA_OPTS="-Xms1024m -Xmx4096m"
fi
case $startStop in
(start)
check_before_start
echo running $command
CMD="${JAVA_HOME}/bin/java -Dapp.home=${HBASE_CONF_DIR}/../ ${CHAOS_JAVA_OPTS} -cp ${CLASSPATH} org.apache.hadoop.hbase.chaos.ChaosService -$command start &>> ${CHAOS_LOGLOG} &"
eval $CMD
PID=$(echo $!)
echo ${PID} >${CHAOS_PID}
echo "Chaos ${1} process Started with ${PID} !"
now=$(date)
echo "${now} Chaos ${1} process Started with ${PID} !" >>${CHAOS_LOGLOG}
;;
(stop)
echo stopping $command
if [ -f $CHAOS_PID ]; then
pidToKill=`cat $CHAOS_PID`
# kill -0 == see if the PID exists
if kill -0 $pidToKill > /dev/null 2>&1; then
echo -n stopping $command
echo "`date` Terminating $command" >> $CHAOS_LOGLOG
kill $pidToKill > /dev/null 2>&1
waitForProcessEnd $pidToKill $command
else
retval=$?
echo no $command to stop because kill -0 of pid $pidToKill failed with status $retval
fi
else
echo no $command to stop because no pid file $CHAOS_PID
fi
rm -f $CHAOS_PID
;;
(*)
echo $usage
exit 1
;;
esac