blob: 922ce0cdc4bb375b1758857df02665a8e5e93bb9 [file] [log] [blame]
#!/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.
if [ "$INFRA_MANAGER_JAVA_MEM" = "" ]; then
INFRA_MANAGER_JAVA_MEM="-Xmx1g"
fi
readlinkf(){
# get real path on mac OSX
perl -MCwd -e 'print Cwd::abs_path shift' "$1";
}
if [ "$(uname -s)" = 'Linux' ]; then
SCRIPT_DIR="`dirname "$(readlink -f "$0")"`"
else
SCRIPT_DIR="`dirname "$(readlinkf "$0")"`"
fi
INFRA_MANAGER_ROOT_DIR="`dirname \"$SCRIPT_DIR\"`"
INFRA_MANAGER_LIBS_DIR="$INFRA_MANAGER_ROOT_DIR/libs"
if [ "$INFRA_MANAGER_CONF_DIR" = "" ]; then
if [ -d "$INFRA_MANAGER_ROOT_DIR/conf" ]; then
INFRA_MANAGER_CONF_DIR="$INFRA_MANAGER_ROOT_DIR/conf"
fi
fi
if [ -f "$INFRA_MANAGER_CONF_DIR/infra-manager-env.sh" ]; then
source $INFRA_MANAGER_CONF_DIR/infra-manager-env.sh
fi
JVM="java"
if [ -x $JAVA_HOME/bin/java ]; then
JVM=$JAVA_HOME/bin/java
fi
if [ ! -z "$INFRA_MANAGER_SOLR_CLIENT_SSL_INCLUDE" ]; then
source $INFRA_MANAGER_SOLR_CLIENT_SSL_INCLUDE
fi
if [ -z "$INFRA_MANAGER_PID_FILE" ]; then
INFRA_MANAGER_PID_DIR=$HOME
export INFRA_MANAGER_PID_FILE=$INFRA_MANAGER_PID_DIR/infra-manager.pid
fi
if [ -z "$LOG_FILE" ]; then
export LOG_FILE="infra-manager.log"
fi
INFRA_MANAGER_GC_LOGFILE="infra-manager-gc.log"
if [ -z "$LOG_PATH" ]; then
LOG_FILE="$HOME/$LOG_FILE"
INFRA_MANAGER_GC_LOGFILE="$HOME/$INFRA_MANAGER_GC_LOGFILE"
else
LOG_PATH_WITHOUT_SLASH=${LOG_PATH%/}
LOG_FILE="$LOG_PATH_WITHOUT_SLASH/$LOG_FILE"
INFRA_MANAGER_GC_LOGFILE="$LOG_PATH_WITHOUT_SLASH/$INFRA_MANAGER_GC_LOGFILE"
fi
java_version=$($JVM -version 2>&1 | grep 'version' | cut -d'"' -f2 | cut -d'.' -f2)
if [ $java_version == "8" ]; then
INFRA_MANAGER_GC_OPTS="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$INFRA_MANAGER_GC_LOGFILE"
else
INFRA_MANAGER_GC_OPTS="-Xlog:gc*:file=$INFRA_MANAGER_GC_LOGFILE:time"
fi
function print_usage() {
cat << EOF
Usage: [<command>] [<arguments with flags>]
commands:
start Start Infra Manager
stop Stop Infra Manager
status Check Infra Manager is running or not (pid file)
help Print usage
start command arguments:
-d, --debug Start java process in debug mode
-f, --foreground Start java process in foreground
EOF
}
function spinner() {
local pid=$1
local delay=0.5
local spinstr='|/-\'
while [ "$(ps aux | awk '{print $2}' | grep -w $pid)" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
function status() {
echo "Checking Infra Manager status ..." >&2
if [ -f "$INFRA_MANAGER_PID_FILE" ]; then
INFRA_MANAGER_PID=`cat "$INFRA_MANAGER_PID_FILE"`
else
echo "Infra Manager pid not exists. (probably the process is not running)" >&2
return 1
fi
if ps -p $INFRA_MANAGER_PID > /dev/null
then
echo "Infra Manager process is running. (pid: $INFRA_MANAGER_PID)" >&2
return 0
else
echo "Infra Manager process is not running." >&2
return 1
fi
}
function start() {
exit_status=$(status; echo $?)
if [ "$exit_status" = "0" ]; then
echo "Skipping start process."
exit 0
fi
FG="false"
INFRA_MANAGER_DEBUG_SUSPEND=${INFRA_MANAGER_DEBUG_SUSPEND:-n}
INFRA_MANAGER_DEBUG_PORT=${INFRA_MANAGER_DEBUG_PORT:-"5005"}
if [ "$INFRA_MANAGER_DEBUG" = "true" ]; then
if [ $java_version == "8" ]; then
INFRA_MANAGER_DEBUG_ADDRESS=$INFRA_MANAGER_DEBUG_PORT
else
INFRA_MANAGER_DEBUG_ADDRESS="*:$INFRA_MANAGER_DEBUG_PORT"
fi
INFRA_MANAGER_JAVA_OPTS="$INFRA_MANAGER_JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=$INFRA_MANAGER_DEBUG_ADDRESS,server=y,suspend=$INFRA_MANAGER_DEBUG_SUSPEND "
fi
if [ "$INFRA_MANAGER_SSL" = "true" ]; then
INFRA_MANAGER_JAVA_OPTS="$INFRA_MANAGER_JAVA_OPTS -Djavax.net.ssl.keyStore=$INFRA_MANAGER_KEYSTORE_LOCATION -Djavax.net.ssl.keyStoreType=$INFRA_MANAGER_KEYSTORE_TYPE -Djavax.net.ssl.trustStore=$INFRA_MANAGER_TRUSTSTORE_LOCATION -Djavax.net.ssl.trustStoreType=$INFRA_MANAGER_TRUSTSTORE_TYPE"
fi
if [ "$INFRA_MANAGER_JMX" = "true" ]; then
INFRA_MANAGER_JAVA_OPTS="$INFRA_MANAGER_JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=2099"
fi
if [ $# -gt 0 ]; then
while true; do
case "$1" in
-f|--foreground)
FG="true"
shift
;;
-d|--debug)
if [ "$INFRA_MANAGER_DEBUG" != "true" ]; then
INFRA_MANAGER_JAVA_OPTS="$INFRA_MANAGER_JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=$INFRA_MANAGER_DEBUG_PORT,server=y,suspend=$INFRA_MANAGER_DEBUG_SUSPEND "
fi
shift
;;
*)
if [ "${1:0:2}" == "-D" ]; then
# pass thru any opts that begin with -D (java system props)
INFRA_MANAGER_JAVA_OPTS+=("$1")
echo "$INFRA_MANAGER_JAVA_OPTS"
shift
else
if [ "$1" != "" ]; then
print_usage
exit 1
else
break
fi
fi
;;
esac
done
fi
if [ $FG == "true" ]; then
echo "Starting Infra Manager... (foreground) pid_file=$INFRA_MANAGER_PID_FILE"
echo "Run command $JVM -cp '$INFRA_MANAGER_CONF_DIR:$INFRA_MANAGER_LIBS_DIR/*' $INFRA_MANAGER_GC_OPTS $INFRA_MANAGER_JAVA_OPTS $INFRA_MANAGER_JAVA_MEM org.apache.ambari.infra.InfraManager"
$JVM -cp "$INFRA_MANAGER_CONF_DIR:$INFRA_MANAGER_LIBS_DIR/*" $INFRA_MANAGER_GC_OPTS $INFRA_MANAGER_JAVA_OPTS $INFRA_MANAGER_JAVA_MEM org.apache.ambari.infra.InfraManager
else
echo "Starting Infra Manager... Output file=$LOG_FILE pid_file=$INFRA_MANAGER_PID_FILE"
echo "Run command nohup $JVM -cp '$INFRA_MANAGER_CONF_DIR:$INFRA_MANAGER_LIBS_DIR/*' $INFRA_MANAGER_GC_OPTS $INFRA_MANAGER_JAVA_OPTS $INFRA_MANAGER_JAVA_MEM org.apache.ambari.infra.InfraManager"
nohup $JVM -cp "$INFRA_MANAGER_CONF_DIR:$INFRA_MANAGER_LIBS_DIR/*" $INFRA_MANAGER_GC_OPTS $INFRA_MANAGER_JAVA_OPTS $INFRA_MANAGER_JAVA_MEM org.apache.ambari.infra.InfraManager > $LOG_FILE 2>&1 &
fi
}
function stop() {
INFRA_MANAGER_STOP_WAIT=3
if [ -f "$INFRA_MANAGER_PID_FILE" ]; then
INFRA_MANAGER_PID=`cat "$INFRA_MANAGER_PID_FILE"`
fi
if [ "$INFRA_MANAGER_PID" != "" ]; then
echo -e "Sending stop command to Infra Manager... Checking PID: $INFRA_MANAGER_PID."
kill $INFRA_MANAGER_PID
(loops=0
while true
do
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $INFRA_MANAGER_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
slept=$((loops * 2))
if [ $slept -lt $INFRA_MANAGER_STOP_WAIT ]; then
sleep 2
loops=$[$loops+1]
else
exit # subshell!
fi
else
exit # subshell!
fi
done) &
spinner $!
rm -f "$INFRA_MANAGER_PID_FILE"
else
echo -e "No Infra Manager process found to stop."
exit 0
fi
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $INFRA_MANAGER_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
echo -e "Infra Manager process $INFRA_MANAGER_PID is still running; forcefully killing it now."
kill -9 $INFRA_MANAGER_PID
echo "Killed process $INFRA_MANAGER_PID"
rm -f "$INFRA_MANAGER_PID_FILE"
sleep 1
else
echo "Infra Manager is stopped."
fi
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $INFRA_MANAGER_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
echo "ERROR: Failed to kill Infra Manager Java process $INFRA_MANAGER_PID ... script fails."
exit 1
fi
}
if [ $# -gt 0 ]; then
SCRIPT_CMD="$1"
shift
else
print_usage
exit 1
fi
case $SCRIPT_CMD in
start)
start ${1+"$@"}
;;
stop)
stop
;;
status)
status
;;
help)
print_usage
exit 0
;;
*)
print_usage
exit 1
;;
esac