blob: 7fa23acf896bf57b2d035a77747402cbb0deca7b [file] [log] [blame]
#!/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.
#
# Support functions
#
# Follow symlinks on Linux and Darwin
function real_script_name() {
local base=$1
local real
if readlink -f $base >/dev/null 2>&1; then
# Darwin/Mac OS X
real=`readlink -f $base`
fi
if [[ "$?" != "0" || -z "$real" ]]; then
# Linux
local bin=$(cd -P -- "$(dirname -- "$base")">/dev/null && pwd -P)
local script="$(basename -- "$base")"
real="$bin/$script"
fi
echo "$real"
}
function usage() {
echo "usage: $0 [start|stop|foreground]"
echo " start Start the Templeton Server"
echo " stop Stop the Templeton Server"
echo " foreground Run the Templeton Server in the foreground"
exit 1
}
# Print an error message and exit
function die() {
echo "templeton: $@" 1>&2
exit 1
}
# Print an message
function log() {
echo "templeton: $@"
}
# Find the templeton jar
function find_jar_path() {
for dir in "." "build" "share/hcatalog/"; do
local jar="$base_dir/$dir/$TEMPLETON_JAR"
if [[ -f $jar ]]; then
echo $jar
break
fi
done
}
# Find the templeton classpath
function find_classpath() {
local classpath=""
for dir in "share/hcatalog" "build/ivy/lib/templeton" "conf" ; do
local path="$base_dir/$dir"
if [[ -d $path ]]; then
for jar_or_conf in $path/*; do
if [[ -z "$classpath" ]]; then
classpath="$jar_or_conf"
else
classpath="$classpath:$jar_or_conf"
fi
done
fi
done
if [[ -n "$TEMPLETON_CONF_DIR" ]]; then
if [[ -z "$classpath" ]]; then
classpath="$TEMPLETON_CONF_DIR"
else
classpath="$classpath:$TEMPLETON_CONF_DIR"
fi
fi
# Append hcat classpath
local hcat_classpath
hcat_classpath=`hcat -classpath`
if [[ "$?" != "0" ]]; then
die "Unable to get the hcatalog classpath"
fi
echo "$classpath:$hcat_classpath"
}
# Check if the pid is running
function check_pid() {
local pid=$1
if ps -p $pid > /dev/null; then
return 0
else
return 1
fi
}
# Start the templeton server in the foreground
function foreground_templeton() {
$start_cmd
}
# Start the templeton server in the background. Record the PID for
# later use.
function start_templeton() {
if [[ -f $PID_FILE ]]; then
# Check if there is a server running
local pid=`cat $PID_FILE`
if check_pid $pid; then
die "already running on process $pid"
fi
fi
log "starting ..."
log "$start_cmd"
nohup $start_cmd >>$CONSOLE_LOG 2>>$ERROR_LOG &
local pid=$!
if [[ -z "${pid}" ]] ; then # we failed right off
die "failed to start. Check logs in " `dirname $ERROR_LOG`
fi
sleep $SLEEP_TIME_AFTER_START
if check_pid $pid; then
echo $pid > $PID_FILE
log "starting ... started."
else
die "failed to start. Check logs in " `dirname $ERROR_LOG`
fi
}
# Stop a running server
function stop_templeton() {
local pid
if [[ -f $PID_FILE ]]; then
# Check if there is a server running
local check=`cat $PID_FILE`
if check_pid $check; then
pid=$check
fi
fi
if [[ -z "$pid" ]]; then
log "no running server found"
else
log "stopping ..."
kill $pid
sleep $SLEEP_TIME_AFTER_START
if check_pid $pid; then
die "failed to stop"
else
log "stopping ... stopped"
fi
fi
}
#
# Build command line and run
#
this=`real_script_name "${BASH_SOURCE-$0}"`
this_bin=`dirname $this`
base_dir="$this_bin/.."
if [[ -f "$base_dir/libexec/templeton_config.sh" ]]; then
. "$base_dir/libexec/templeton_config.sh"
else
. "$this_bin/templeton_config.sh"
fi
JAR=`find_jar_path`
if [[ -z "$JAR" ]]; then
die "No templeton jar found"
fi
CLASSPATH=`find_classpath`
if [[ -z "$CLASSPATH" ]]; then
die "No classpath or jars found"
fi
CLASSPATH="$JAR:$CLASSPATH"
if [[ -z "$HADOOP_CLASSPATH" ]]; then
export HADOOP_CLASSPATH="$CLASSPATH"
else
export HADOOP_CLASSPATH="$CLASSPATH:$HADOOP_CLASSPATH"
fi
if [[ -z "$TEMPLETON_LOG4J" ]]; then
if [[ -f "$base_dir/conf/templeton-log4j.properties" ]]; then
TEMPLETON_LOG4J="$base_dir/conf/templeton-log4j.properties";
elif [[ -f "$base_dir/conf/templeton-log4j.properties" ]]; then
TEMPLETON_LOG4J="$base_dir/conf/templeton-log4j.properties";
else
TEMPLETON_LOG4J="templeton-log4j.properties";
fi
fi
export HADOOP_USER_CLASSPATH_FIRST=true
export HADOOP_OPTS="-Dtempleton.log.dir=$TEMPLETON_LOG_DIR -Dlog4j.configuration=$TEMPLETON_LOG4J"
start_cmd="$HADOOP_PREFIX/bin/hadoop jar $JAR org.apache.hcatalog.templeton.Main "
cmd=$1
case $cmd in
start)
start_templeton
;;
stop)
stop_templeton
;;
foreground)
foreground_templeton
;;
*)
usage
;;
esac
log "done"