azkaban-aplcache

Fixed bash scripts for solo server. (#950) Changes - shutdown

3/22/2017 7:42:56 PM

Details

diff --git a/azkaban-common/src/main/bash/util.sh b/azkaban-common/src/main/bash/util.sh
index 5290b0b..c817e28 100755
--- a/azkaban-common/src/main/bash/util.sh
+++ b/azkaban-common/src/main/bash/util.sh
@@ -2,10 +2,20 @@
 # Common utils
 set -o nounset
 
+
+# If process is still running then abort start up
+function abort_if_process_already_running {
+  installdir="$1"
+  pidfile="${installdir}/currentpid"
+  if [ -f ${pidfile} ]; then
+    pid=`cat ${pidfile}`
+    ps -p ${pid} 2>&1 1>nul && echo "Process already running [pid: ${pid}]. Aborting." && exit 1
+  fi
+}
+
 # kill the process with retry
 # return 0 if kill succeeds or no process to kill,
 #        1 if kill fails
-
 function kill_process_with_retry {
    pid="$1"
    pname="$2"
@@ -45,4 +55,3 @@ function kill_process_with_retry {
     return 0
    fi
 }
-
diff --git a/azkaban-solo-server/build.gradle b/azkaban-solo-server/build.gradle
index afa4b56..13e3dc9 100644
--- a/azkaban-solo-server/build.gradle
+++ b/azkaban-solo-server/build.gradle
@@ -19,6 +19,10 @@ distributions {
         into 'bin'
         fileMode = 0755
       }
+      from(project(':azkaban-common').files('src/main/bash')) {
+        into 'bin'
+        fileMode = 0755
+      }
       from ('src/main/resources/conf') {
         into 'conf'
       }
diff --git a/azkaban-solo-server/src/main/bash/azkaban-solo-shutdown.sh b/azkaban-solo-server/src/main/bash/azkaban-solo-shutdown.sh
index e97bc32..df93568 100755
--- a/azkaban-solo-server/src/main/bash/azkaban-solo-shutdown.sh
+++ b/azkaban-solo-server/src/main/bash/azkaban-solo-shutdown.sh
@@ -1,8 +1,11 @@
-#!/bin/bash
-azkaban_dir=$(dirname $0)/..
+#!/usr/bin/env bash
+# Shutdown script for azkaban solo server
+set -o nounset
+source "$(dirname $0)/util.sh"
 
-proc=`cat $azkaban_dir/currentpid`
-echo "killing AzkabanSingleServer"
-kill $proc
+installdir="$(dirname $0)/.."
+maxattempt=3
+pid=`cat ${installdir}/currentpid`
+pname="solo server"
 
-cat /dev/null > $azkaban_dir/currentpid
+kill_process_with_retry "${pid}" "${pname}" "${maxattempt}" && rm -f ${installdir}/currentpid
diff --git a/azkaban-solo-server/src/main/bash/azkaban-solo-start.sh b/azkaban-solo-server/src/main/bash/azkaban-solo-start.sh
index b02390c..895a3bc 100755
--- a/azkaban-solo-server/src/main/bash/azkaban-solo-start.sh
+++ b/azkaban-solo-server/src/main/bash/azkaban-solo-start.sh
@@ -1,59 +1,45 @@
 #!/bin/bash
+# This script starts the solo server
+source "$(dirname $0)/util.sh"
 
-azkaban_dir=$(dirname $0)/..
+installdir=$(dirname $0)/..
+abort_if_process_already_running ${installdir}
 
 # Specifies location of azkaban.properties, log4j.properties files
 # Change if necessary
-conf=$azkaban_dir/conf
+conf=${installdir}/conf
 
-if [[ -z "$tmpdir" ]]; then
-tmpdir=/tmp
+if [[ -z "${tmpdir:-}" ]]; then
+  tmpdir=/tmp
 fi
 
-for file in $azkaban_dir/lib/*.jar;
-do
-  CLASSPATH=$CLASSPATH:$file
-done
-
-for file in $azkaban_dir/extlib/*.jar;
-do
-  CLASSPATH=$CLASSPATH:$file
-done
-
-for file in $azkaban_dir/plugins/*/*.jar;
-do
-  CLASSPATH=$CLASSPATH:$file
-done
+CLASSPATH=${CLASSPATH:-}:${installdir}/lib/*:${installdir}/extlib/*
 
 if [ "$HADOOP_HOME" != "" ]; then
-        echo "Using Hadoop from $HADOOP_HOME"
-        CLASSPATH=$CLASSPATH:$HADOOP_HOME/conf:$HADOOP_HOME/*
-        JAVA_LIB_PATH="-Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64"
+  echo "Using Hadoop from $HADOOP_HOME"
+  CLASSPATH=${CLASSPATH}:${HADOOP_HOME}/conf:${HADOOP_HOME}/*
+  JAVA_LIB_PATH="-Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64"
 else
-        echo "Error: HADOOP_HOME is not set. Hadoop job types will not run properly."
+  echo "Error: HADOOP_HOME is not set. Hadoop job types will not run properly."
 fi
 
 if [ "$HIVE_HOME" != "" ]; then
-        echo "Using Hive from $HIVE_HOME"
-        CLASSPATH=$CLASSPATH:$HIVE_HOME/conf:$HIVE_HOME/lib/*
+  echo "Using Hive from $HIVE_HOME"
+  CLASSPATH=${CLASSPATH}:${HIVE_HOME}/conf:${HIVE_HOME}/lib/*
 fi
 
-echo $azkaban_dir;
-echo $CLASSPATH;
+echo "CLASSPATH: ${CLASSPATH}";
 
-executorport=`cat $conf/azkaban.properties | grep executor.port | cut -d = -f 2`
+executorport=`cat ${conf}/azkaban.properties | grep executor.port | cut -d = -f 2`
 serverpath=`pwd`
 
-if [ -z $AZKABAN_OPTS ]; then
-  AZKABAN_OPTS=-Xmx3G
-fi
 # Set the log4j configuration file
-if [ -f $conf/log4j.properties ]; then
+if [ -f ${conf}/log4j.properties ]; then
   AZKABAN_OPTS="$AZKABAN_OPTS -Dlog4j.configuration=file:$conf/log4j.properties"
 fi
-AZKABAN_OPTS="$AZKABAN_OPTS -server -Dcom.sun.management.jmxremote -Djava.io.tmpdir=$tmpdir -Dexecutorport=$executorport -Dserverpath=$serverpath -Dlog4j.log.dir=$azkaban_dir/logs"
+AZKABAN_OPTS="$AZKABAN_OPTS -Xmx3G -server -Djava.io.tmpdir=$tmpdir -Dexecutorport=$executorport -Dserverpath=$serverpath -Dlog4j.log.dir=$installdir/logs"
 
-java $AZKABAN_OPTS -cp $CLASSPATH azkaban.soloserver.AzkabanSingleServer -conf $conf $@ &
+java ${AZKABAN_OPTS} -cp ${CLASSPATH} azkaban.soloserver.AzkabanSingleServer -conf ${conf} $@ &
 
-echo $! > $azkaban_dir/currentpid
+echo $! > ${installdir}/currentpid