| #!/bin/sh |
| |
| # |
| # Copyright © 2014 Cask Data, Inc. |
| # |
| # Licensed 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. |
| # |
| |
| # Source function library. used for "status" use case |
| if [ -f "/etc/rc.d/init.d/functions" ]; then |
| PLATFORM="RHEL" |
| . /etc/rc.d/init.d/functions |
| elif [ -f /lib/lsb/init-functions ] ; then |
| PLATFORM="UBUNTU" |
| . /lib/lsb/init-functions |
| else |
| PLATFORM="UNSUPPORTED" |
| fi |
| |
| # Attempt to set APP_HOME |
| # Resolve links: $0 may be a link |
| PRG="$0" |
| bin=`dirname "${BASH_SOURCE-$0}"` |
| bin=`cd "$bin"; pwd` |
| lib="$bin"/../lib |
| conf="$bin"/../conf |
| script=`basename $0` |
| |
| # Resolve relative symlinks |
| while [ -h "$PRG" ] ; do |
| ls=`ls -ld "$PRG"` |
| link=`expr "$ls" : '.*-> \(.*\)$'` |
| if expr "$link" : '/.*' > /dev/null; then |
| PRG="$link" |
| else |
| PRG=`dirname "$PRG"`"/$link" |
| fi |
| done |
| SAVED="`pwd`" |
| cd "`dirname \"$PRG\"`/.." |
| APP_HOME="`pwd -P`" |
| APP=`basename $0` |
| |
| # Load component common environment file too |
| . $bin/tephra-env.sh |
| |
| pid=$PID_DIR/tephra-service-${IDENT_STRING}.pid |
| |
| # In other environment, the jars are expected to be in <HOME>/lib directory. |
| # Load all the jar files. Not ideal, but we need to load only the things that |
| # is needed by this script. |
| if [ "$CLASSPATH" = "" ]; then |
| CLASSPATH=${lib}/* |
| else |
| CLASSPATH=$CLASSPATH:${lib}/* |
| fi |
| |
| # Load the configuration too. |
| if [ -d "$conf" ]; then |
| CLASSPATH=$CLASSPATH:"$conf"/ |
| fi |
| |
| # Set Log location |
| if [ ! -e $LOG_DIR ]; then |
| mkdir -p $LOG_DIR; |
| fi |
| export LOG_PREFIX="tephra-service-$IDENT_STRING-$HOSTNAME" |
| export LOGFILE=$LOG_PREFIX.log |
| loglog="${LOG_DIR}/${LOGFILE}" |
| |
| # set the classpath to include hadoop and hbase dependencies |
| set_classpath() |
| { |
| COMP_HOME=$1 |
| if [ -n "$HBASE_HOME" ]; then |
| HBASE_CP=`$HBASE_HOME/bin/hbase classpath` |
| elif [ `which hbase` ]; then |
| HBASE_CP=`hbase classpath` |
| fi |
| |
| export HBASE_CP |
| |
| if [ -n "$HBASE_CP" ]; then |
| CP=$COMP_HOME/phoenix-client/target/*:$HBASE_CP:$EXTRA_CLASSPATH |
| else |
| # assume Hadoop/HBase libs are included via EXTRA_CLASSPATH |
| echo "WARN: could not find Hadoop and HBase libraries" |
| CP=$COMP_HOME/phoenix-client/target/*:$EXTRA_CLASSPATH |
| fi |
| |
| # Setup classpaths. |
| if [ -n "$CLASSPATH" ]; then |
| CLASSPATH=$CLASSPATH:$CP |
| else |
| CLASSPATH=$CP |
| fi |
| |
| export CLASSPATH |
| } |
| |
| # Attempts to find JAVA in few ways. |
| set_java () |
| { |
| # Determine the Java command to use to start the JVM. |
| if [ -n "$JAVA_HOME" ] ; then |
| if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
| # IBM's JDK on AIX uses strange locations for the executables |
| export JAVA="$JAVA_HOME/jre/sh/java" |
| else |
| export JAVA="$JAVA_HOME/bin/java" |
| fi |
| if [ ! -x "$JAVA" ] ; then |
| echo "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
| |
| Please set the JAVA_HOME variable in your environment to match the |
| location of your Java installation." >&2 |
| exit 1 |
| fi |
| else |
| export JAVA="java" |
| which java >/dev/null 2>&1 || { echo "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
| Please set the JAVA_HOME variable in your environment to match the |
| location of your Java installation." >&2 ; exit 1; } |
| fi |
| } |
| |
| # checks if there exists a PID that is already running. return 0 idempotently |
| check_before_start() |
| { |
| if [ ! -d "$PID_DIR" ]; then |
| mkdir -p "$PID_DIR" |
| fi |
| if [ -f $pid ]; then |
| if kill -0 `cat $pid` > /dev/null 2>&1; then |
| #echo "$APP $SERVICE running as process `cat $pid`. Stop it first." |
| echo "$APP running as process `cat $pid`. Stop it first." |
| exit 0 |
| fi |
| fi |
| } |
| |
| # Set Niceness |
| if [ "$NICENESS" = "" ]; then |
| export NICENESS=0 |
| fi |
| |
| start() { |
| # Setup classpaths. |
| set_classpath $APP_HOME |
| |
| # sets the JAVA variable. |
| set_java |
| |
| check_before_start |
| |
| echo "`date` Starting $APP service on `hostname`" |
| echo "`date` Starting $APP service on `hostname`" >> $loglog |
| echo "`ulimit -a`" >> $loglog 2>&1 |
| |
| export MAIN_CLASS="org.apache.tephra.TransactionServiceMain" |
| echo "Running class $MAIN_CLASS" |
| echo "Command: " "$JAVA" $OPTS -cp $CLASSPATH $JAVA_HEAPMAX $MAIN_CLASS >>$loglog |
| nohup nice -n $NICENESS "$JAVA" $OPTS -cp $CLASSPATH $JAVA_HEAPMAX ${MAIN_CLASS} </dev/null >>$loglog 2>&1 & |
| echo $! >$pid |
| } |
| |
| stop() { |
| if [ -f $pid ]; then |
| pidToKill=`cat $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" >> $loglog |
| kill $pidToKill > /dev/null 2>&1 |
| while kill -0 $pidToKill > /dev/null 2>&1; |
| do |
| echo -n "." |
| sleep 1; |
| done |
| rm $pid |
| echo |
| else |
| retval=$? |
| echo nothing to stop because kill -0 of pid $pidToKill failed with status $retval |
| fi |
| rm -f $pid |
| else |
| echo nothing to stop because no pid file $pid |
| fi |
| } |
| |
| restart() { |
| stop |
| start |
| } |
| |
| condrestart(){ |
| case "$PLATFORM" in |
| "RHEL") |
| rh_status > /dev/null 2>&1 |
| retval=$? |
| ;; |
| "UBUNTU") |
| ub_status > /dev/null 2>&1 |
| retval=$? |
| ;; |
| "UNSUPPORTED") |
| echo "condrestart is not supported on platform" |
| exit 1 |
| ;; |
| esac |
| |
| if [[ $retval -eq 0 ]]; then |
| restart |
| fi |
| } |
| |
| rh_status() { |
| echo "checking status" |
| # call sourced status function |
| status -p $pid |
| } |
| |
| ub_status() { |
| echo "checking status" |
| # call sourced status function |
| status_of_proc -p $pid "$0" "$APP" |
| } |
| |
| # Executes a specific class' main method with the classpath and environment setup |
| run() { |
| classname=$1 |
| shift |
| if [ -z "$classname" ]; then |
| echo "ERROR: No classname was given!" |
| echo "Usage: $0 run <fully qualified classname> [arguments]" |
| exit 1 |
| fi |
| # Setup classpaths. |
| set_classpath $APP_HOME |
| |
| # sets the JAVA variable. |
| set_java |
| |
| echo "Running class $classname" |
| "$JAVA" $OPTS -cp $CLASSPATH $JAVA_HEAPMAX $classname $@ |
| } |
| |
| case "$1" in |
| start) |
| $1 |
| ;; |
| |
| stop) |
| $1 |
| ;; |
| |
| restart) |
| $1 |
| ;; |
| |
| condrestart) |
| $1 |
| ;; |
| |
| status) |
| case "$PLATFORM" in |
| "RHEL") |
| rh_status |
| ;; |
| "UBUNTU") |
| ub_status |
| ;; |
| "UNSUPPORTED") |
| echo "status is not supported on platform" |
| exit 1 |
| ;; |
| esac |
| ;; |
| |
| classpath) |
| set_classpath $APP_HOME |
| set_java |
| echo $CLASSPATH |
| ;; |
| |
| run) |
| shift |
| run $@ |
| ;; |
| |
| *) |
| echo "Usage: $0 {start|stop|restart|status|run}" |
| exit 1 |
| ;; |
| |
| |
| esac |
| exit $? |
| |