123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #!/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.
- #
- # Runs Livy server.
- usage="Usage: livy-server (start|stop|status)"
- export LIVY_HOME=$(cd $(dirname $0)/.. && pwd)
- LIVY_CONF_DIR=${LIVY_CONF_DIR:-"$LIVY_HOME/conf"}
- if [ -f "${LIVY_CONF_DIR}/livy-env.sh" ]; then
- # Promote all variable declarations to environment (exported) variables
- set -a
- . "${LIVY_CONF_DIR}/livy-env.sh"
- set +a
- fi
- # Find the java binary
- if [ -n "${JAVA_HOME}" ]; then
- RUNNER="${JAVA_HOME}/bin/java"
- elif [ `command -v java` ]; then
- RUNNER="java"
- else
- echo "JAVA_HOME is not set" >&2
- exit 1
- fi
- LIVY_IDENT_STRING=${LIVY_IDENT_STRING:-"$USER"}
- LIVY_PID_DIR=${LIVY_PID_DIR:-"/tmp"}
- LIVY_MAX_LOG_FILES=${LIVY_MAX_LOG_FILES:-5}
- pid="$LIVY_PID_DIR/livy-$LIVY_IDENT_STRING-server.pid"
- livy_rotate_log() {
- log=$1
- num=$LIVY_MAX_LOG_FILES
- if [ $LIVY_MAX_LOG_FILES -lt 1 ]; then
- num=5
- fi
- if [ -f "$log" ]; then # rotate logs
- while [ $num -gt 1 ]; do
- prev=`expr $num - 1`
- [ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num"
- num=$prev
- done
- mv "$log" "$log.$num"
- fi
- }
- create_dir() {
- dir_name=$1
- dir_variable=$2
- if [ ! -d "$dir_name" ]; then
- mkdir -p $dir_name
- fi
- if [ ! -w "$dir_name" ]; then
- echo "$USER doesn't have permission to write to directory $dir_name (defined by $dir_variable)."
- exit 1
- fi
- }
- start_livy_server() {
- LIBDIR="$LIVY_HOME/jars"
- if [ ! -d "$LIBDIR" ]; then
- LIBDIR="$LIVY_HOME/server/target/jars"
- THRIFT_LIBDIR="$LIVY_HOME/thriftserver/server/target/jars"
- fi
- if [ ! -d "$LIBDIR" ]; then
- echo "Could not find Livy jars directory." 1>&2
- exit 1
- else
- if [ -d "$THRIFT_LIBDIR" ]; then
- LIBDIR="$THRIFT_LIBDIR/*:$LIBDIR"
- fi
- fi
- LIVY_CLASSPATH="${LIVY_CLASSPATH:-${LIBDIR}/*:${LIVY_CONF_DIR}}"
- if [ -n "$SPARK_CONF_DIR" ]; then
- LIVY_CLASSPATH="$LIVY_CLASSPATH:$SPARK_CONF_DIR"
- fi
- if [ -n "$HADOOP_CONF_DIR" ]; then
- LIVY_CLASSPATH="$LIVY_CLASSPATH:$HADOOP_CONF_DIR"
- fi
- if [ -n "$YARN_CONF_DIR" ]; then
- LIVY_CLASSPATH="$LIVY_CLASSPATH:$YARN_CONF_DIR"
- fi
- command="$RUNNER $LIVY_SERVER_JAVA_OPTS -cp $LIVY_CLASSPATH:$CLASSPATH org.apache.livy.server.LivyServer"
- if [ $1 = "old" ]; then
- exec $command
- else
- # get log directory
- LIVY_LOG_DIR=${LIVY_LOG_DIR:-${LIVY_HOME}/logs}
- create_dir $LIVY_LOG_DIR "LIVY_LOG_DIR"
- create_dir $LIVY_PID_DIR "LIVY_PID_DIR"
- log="$LIVY_LOG_DIR/livy-$LIVY_IDENT_STRING-server.out"
- # Set default scheduling priority
- LIVY_NICENESS=${LIVY_NICENESS:-0}
- if [ -f "$pid" ]; then
- TARGET_ID="$(cat "$pid")"
- if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then
- echo "livy-server running as process $TARGET_ID. Stop it first."
- exit 1
- fi
- fi
- livy_rotate_log "$log"
- echo "starting $command, logging to $log"
- nohup nice -n "$LIVY_NICENESS" $command >> "$log" 2>&1 < /dev/null &
- newpid="$!"
- echo "$newpid" > "$pid"
- sleep 2
- # Check if the process has died; in that case we'll tail the log so the user can see
- if [[ ! $(ps -p "$newpid" -o comm=) =~ "java" ]]; then
- echo "failed to launch $command:"
- tail -2 "$log" | sed 's/^/ /'
- echo "full log in $log"
- rm -rf "$pid"
- exit 1
- fi
- fi
- }
- option=$1
- case $option in
- (start)
- start_livy_server "new"
- ;;
- ("")
- # make it compatible with previous version of livy-server
- start_livy_server "old"
- ;;
- (stop)
- if [ -f "$pid" ]; then
- TARGET_ID="$(cat "$pid")"
- if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then
- echo "stopping livy-server"
- kill "$TARGET_ID" && rm -f "$pid"
- else
- echo "no livy-server to stop"
- fi
- else
- echo "no livy-server to stop"
- fi
- ;;
- (status)
- if [ -f "$pid" ]; then
- TARGET_ID="$(cat "$pid")"
- if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then
- echo "livy-server is running (pid: $TARGET_ID)"
- else
- echo "livy-server is not running"
- fi
- else
- echo "livy-server is not running"
- fi
- ;;
- (*)
- echo $usage
- exit 1
- ;;
- esac
|