azkaban-aplcache
Details
azkaban-common/src/main/bash/util.sh 13(+11 -2)
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
}
-
azkaban-solo-server/build.gradle 4(+4 -0)
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