141 lines
3.6 KiB
Bash
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
|