blob: acd183bff4ffabf81e9c27e7847234910e2c9715 [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 [ "$LOGSEARCH_JAVA_MEM" = "" ]; then
LOGSEARCH_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
LOGSEARCH_ROOT_DIR="`dirname \"$SCRIPT_DIR\"`"
LOGSEARCH_LIBS_DIR="$LOGSEARCH_ROOT_DIR/libs"
LOGSEARCH_WEBAPP_DIR="$LOGSEARCH_ROOT_DIR/webapp"
if [ "$LOGSEARCH_CONF_DIR" = "" ]; then
if [ -d "$LOGSEARCH_ROOT_DIR/conf" ]; then
LOGSEARCH_CONF_DIR="$LOGSEARCH_ROOT_DIR/conf"
fi
fi
if [ -f "$LOGSEARCH_CONF_DIR/logsearch-env.sh" ]; then
source $LOGSEARCH_CONF_DIR/logsearch-env.sh
fi
JVM="java"
if [ -x $JAVA_HOME/bin/java ]; then
JVM=$JAVA_HOME/bin/java
fi
if [ ! -z "$LOGSEARCH_SOLR_CLIENT_SSL_INCLUDE" ]; then
source $LOGSEARCH_SOLR_CLIENT_SSL_INCLUDE
fi
if [ -z "$LOGSEARCH_PID_FILE" ]; then
LOGSEARCH_DEFAULT_PID_DIR="/var/run/ambari-logsearch-portal"
if [ -d "$LOGSEARCH_DEFAULT_PID_DIR" ]; then
LOGSEARCH_PID_DIR=$LOGSEARCH_DEFAULT_PID_DIR
else
LOGSEARCH_PID_DIR=$HOME
fi
export LOGSEARCH_PID_FILE=$LOGSEARCH_PID_DIR/logsearch.pid
fi
if [ -z "$LOG_FILE" ]; then
export LOG_FILE="logsearch.log"
fi
LOGSEARCH_GC_LOGFILE="logsearch_gc.log"
if [ -z "$LOG_PATH" ]; then
LOG_FILE="$HOME/$LOG_FILE"
LOGSEARCH_GC_LOGFILE="$HOME/$LOGSEARCH_GC_LOGFILE"
else
LOG_PATH_WITHOUT_SLASH=${LOG_PATH%/}
LOG_FILE="$LOG_PATH_WITHOUT_SLASH/$LOG_FILE"
LOGSEARCH_GC_LOGFILE="$LOG_PATH_WITHOUT_SLASH/$LOGSEARCH_GC_LOGFILE"
fi
java_version=$($JVM -version 2>&1 | grep 'java version' | cut -d'"' -f2 | cut -d'.' -f2)
if [ $java_version == "8" ]; then
LOGSEARCH_GC_OPTS="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSEARCH_GC_LOGFILE"
else
LOGSEARCH_GC_OPTS="-Xlog:gc*:file=$LOGSEARCH_GC_LOGFILE:time"
fi
function print_usage() {
cat << EOF
Usage: [<command>] [<arguments with flags>]
commands:
start Start Log Search
stop Stop Log Search
status Check Log Search status (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 Log Search status ..." >&2
if [ -f "$LOGSEARCH_PID_FILE" ]; then
LOGSEARCH_PID=`cat "$LOGSEARCH_PID_FILE"`
else
echo "Log Search pid not exists. (probably the process is not running)" >&2
return 1
fi
if ps -p $LOGSEARCH_PID > /dev/null
then
echo "Log Search process is running. (pid: $LOGSEARCH_PID)" >&2
return 0
else
echo "Log Search 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"
LOGSEARCH_DEBUG_SUSPEND=${LOGSEARCH_DEBUG_SUSPEND:-n}
LOGSEARCH_DEBUG_PORT=${LOGSEARCH_DEBUG_PORT:-"5005"}
if [ "$LOGSEARCH_DEBUG" = "true" ]; then
LOGSEARCH_JAVA_OPTS="$LOGSEARCH_JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=$LOGSEARCH_DEBUG_PORT,server=y,suspend=$LOGSEARCH_DEBUG_SUSPEND "
fi
if [ "$LOGSEARCH_SSL" = "true" ]; then
LOGSEARCH_JAVA_OPTS="$LOGSEARCH_JAVA_OPTS -Djavax.net.ssl.keyStore=$LOGSEARCH_KEYSTORE_LOCATION -Djavax.net.ssl.keyStoreType=$LOGSEARCH_KEYSTORE_TYPE -Djavax.net.ssl.trustStore=$LOGSEARCH_TRUSTSTORE_LOCATION -Djavax.net.ssl.trustStoreType=$LOGSEARCH_TRUSTSTORE_TYPE"
fi
if [ "$LOGSEARCH_JMX" = "true" ]; then
LOGSEARCH_JAVA_OPTS="$LOGSEARCH_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 [ "$LOGSEARCH_DEBUG" != "true" ]; then
LOGSEARCH_JAVA_OPTS="$LOGSEARCH_JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=$LOGSEARCH_DEBUG_PORT,server=y,suspend=$LOGSEARCH_DEBUG_SUSPEND "
fi
shift
;;
*)
if [ "${1:0:2}" == "-D" ]; then
# pass thru any opts that begin with -D (java system props)
LOGSEARCH_JAVA_OPTS+=("$1")
echo "$LOGSEARCH_JAVA_OPTS"
shift
else
if [ "$1" != "" ]; then
print_usage
exit 1
else
break
fi
fi
;;
esac
done
fi
if [ $FG == "true" ]; then
echo "Starting Log Search... (foreground) pid_file=$LOGSEARCH_PID_FILE"
echo "Run command $JVM -cp '$LOGSEARCH_CONF_DIR:$LOGSEARCH_WEBAPP_DIR:$LOGSEARCH_LIBS_DIR/*' $LOGSEARCH_GC_OPTS $LOGSEARCH_JAVA_OPTS $LOGSEARCH_JAVA_MEM org.apache.ambari.logsearch.LogSearch"
$JVM -cp "$LOGSEARCH_CONF_DIR:$LOGSEARCH_WEBAPP_DIR:$LOGSEARCH_LIBS_DIR/*" $LOGSEARCH_GC_OPTS $LOGSEARCH_JAVA_OPTS $LOGSEARCH_JAVA_MEM org.apache.ambari.logsearch.LogSearch
else
echo "Starting Log Search... Output file=$LOG_FILE pid_file=$LOGSEARCH_PID_FILE"
echo "Run command nohup $JVM -cp '$LOGSEARCH_CONF_DIR:$LOGSEARCH_WEBAPP_DIR:$LOGSEARCH_LIBS_DIR/*' $LOGSEARCH_GC_OPTS $LOGSEARCH_JAVA_OPTS $LOGSEARCH_JAVA_MEM org.apache.ambari.logsearch.LogSearch"
nohup $JVM -cp "$LOGSEARCH_CONF_DIR:$LOGSEARCH_WEBAPP_DIR:$LOGSEARCH_LIBS_DIR/*" $LOGSEARCH_GC_OPTS $LOGSEARCH_JAVA_OPTS $LOGSEARCH_JAVA_MEM org.apache.ambari.logsearch.LogSearch > $LOG_FILE 2>&1 &
fi
}
function stop() {
LOGSEARCH_STOP_WAIT=3
if [ -f "$LOGSEARCH_PID_FILE" ]; then
LOGSEARCH_PID=`cat "$LOGSEARCH_PID_FILE"`
fi
if [ "$LOGSEARCH_PID" != "" ]; then
echo -e "Sending stop command to Log Search... Checking PID: $LOGSEARCH_PID."
kill $LOGSEARCH_PID
(loops=0
while true
do
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $LOGSEARCH_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
slept=$((loops * 2))
if [ $slept -lt $LOGSEARCH_STOP_WAIT ]; then
sleep 2
loops=$[$loops+1]
else
exit # subshell!
fi
else
exit # subshell!
fi
done) &
spinner $!
rm -f "$LOGSEARCH_PID_FILE"
else
echo -e "No Log Search process found to stop."
exit 0
fi
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $LOGSEARCH_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
echo -e "Log Search process $LOGSEARCH_PID is still running; forcefully killing it now."
kill -9 $LOGSEARCH_PID
echo "Killed process $LOGSEARCH_PID"
rm -f "$LOGSEARCH_PID_FILE"
sleep 1
else
echo "Log Search is stopped."
fi
CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $LOGSEARCH_PID | sort -r | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
echo "ERROR: Failed to kill Log Search Java process $LOGSEARCH_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