From: Giovanni Meo Date: Tue, 6 Aug 2013 14:01:08 +0000 (+0200) Subject: Enhanced run.sh X-Git-Tag: releasepom-0.1.0~226^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=a0d6ba5c0dba435b963aa113469a5f52bc8245fd;hp=91e19b8e94b926a286d1ad4cd1077858017931e9 Enhanced run.sh - Allowing to enable JVM debug for remote troubleshooting and also to accept extra JVM parameters from command line when launching the controller. - Allowing to start the controller in background and to check status of background process as well to stop a running daemon. Change-Id: I3bd8d49b513f9379313589e4e4152c304e84f6ea Signed-off-by: Giovanni Meo --- diff --git a/opendaylight/distribution/opendaylight/src/main/resources/run.sh b/opendaylight/distribution/opendaylight/src/main/resources/run.sh index 74cadaed38..313b3b2c79 100755 --- a/opendaylight/distribution/opendaylight/src/main/resources/run.sh +++ b/opendaylight/distribution/opendaylight/src/main/resources/run.sh @@ -36,6 +36,74 @@ fi basedir=`dirname ${fullpath}` +function usage { + echo "Usage: $0 [-debug] [-debugsuspend] [-debugport ] [-start []] [-stop] [-status] [-console] [-help] []" + exit 1 +} + +if [ -v "TMP" ]; then + pidfile="${TMP}/opendaylight.PID" +else + pidfile="/tmp/opendaylight.PID" +fi +debug=0 +debugsuspend=0 +debugport=8000 +debugportread="" +startdaemon=0 +daemonport=2400 +daemonportread="" +stopdaemon=0 +statusdaemon=0 +consolestart=1 +dohelp=0 +extraJVMOpts="" +unknown_option=0 +while true ; do + case "$1" in + -debug) debug=1; shift ;; + -debugsuspend) debugsuspend=1; shift ;; + -debugport) shift; debugportread="$1"; if [[ "${debugportread}" =~ ^[0-9]+$ ]] ; then debugport=${debugportread}; shift; else echo "-debugport expects a number but was not found"; exit -1; fi;; + -start) startdaemon=1; shift; daemonportread="$1"; if [[ "${daemonportread}" =~ ^[0-9]+$ ]] ; then daemonport=${daemonportread}; shift; fi;; + -stop) stopdaemon=1; shift ;; + -status) statusdaemon=1; shift ;; + -console) shift ;; + -help) dohelp=1; shift;; + -D*) extraJVMOpts="${extraJVMOpts} $1"; shift;; + -X*) extraJVMOpts="${extraJVMOpts} $1"; shift;; + "") break ;; + *) echo "Unknown option $1"; unknown_option=1; shift ;; + esac +done + +# Unknown Options and help +if [ "${unknown_option}" -eq 1 ]; then + usage +fi + +if [ "${dohelp}" -eq 1 ]; then + usage +fi + +# Validate debug port +if [[ "${debugport}" -lt 1024 ]] || [[ "${debugport}" -gt 65535 ]]; then + echo "Debug Port not in the range [1024,65535] ${debugport}" + exit -1 +fi + +# Validate daemon console port +if [[ "${daemonport}" -lt 1024 ]] || [[ "${daemonport}" -gt 65535 ]]; then + echo "Daemon console Port not in the range [1024,65535] value is ${daemonport}" + exit -1 +fi + +# Debug options +if [ "${debugsuspend}" -eq 1 ]; then + extraJVMOpts="${extraJVMOpts} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${debugport}" +elif [ "${debug}" -eq 1 ]; then + extraJVMOpts="${extraJVMOpts} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${debugport}" +fi + ######################################## # Now add to classpath the OSGi JAR ######################################## @@ -58,13 +126,68 @@ FWCLASSPATH=${FWCLASSPATH},file:${basedir}/lib/org.eclipse.virgo.kernel.equinox. CLASSPATH=${CLASSPATH}:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar FWCLASSPATH=${FWCLASSPATH},file:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar -$JAVA_HOME/bin/java $@ \ - -Djava.io.tmpdir=${basedir}/work/tmp \ - -Dosgi.install.area=${basedir} \ - -Dosgi.configuration.area=${basedir}/configuration \ - -Dosgi.frameworkClassPath=${FWCLASSPATH} \ - -Dosgi.framework=file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar \ - -classpath ${CLASSPATH} \ - org.eclipse.equinox.launcher.Main \ - -console \ - -consoleLog +if [ "${stopdaemon}" -eq 1 ]; then + if [ -e "${pidfile}" ]; then + daemonpid=`cat "${pidfile}"` + kill "${daemonpid}" + rm -f "${pidfile}" + echo "Controller with PID: ${daemonpid} -- Stopped!" + exit 0 + else + echo "Doesn't seem any Controller daemon is currently running" + exit -1 + fi +fi + +if [ "${statusdaemon}" -eq 1 ]; then + if [ -e "${pidfile}" ]; then + daemonpid=`cat "${pidfile}"` + ps -p ${daemonpid} > /dev/null + daemonexists=$? + if [ "${daemonexists}" -eq 0 ]; then + echo "Controller with PID: ${daemonpid} -- Running!" + exit 0 + else + echo "Controller with PID: ${daemonpid} -- Doesn't seem to exist" + rm -f "${pidfile}" + exit 0 + fi + else + echo "Doesn't seem any Controller daemon is currently running, at least no PID file has been found" + exit -1 + fi +fi + +if [ "${startdaemon}" -eq 1 ]; then + if [ -e "${pidfile}" ]; then + echo "Another instance of controller running, check with $0 -status" + exit -1 + fi + $JAVA_HOME/bin/java ${extraJVMOpts} \ + -Djava.io.tmpdir=${basedir}/work/tmp \ + -Dosgi.install.area=${basedir} \ + -Dosgi.configuration.area=${basedir}/configuration \ + -Dosgi.frameworkClassPath=${FWCLASSPATH} \ + -Dosgi.framework=file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar \ + -classpath ${CLASSPATH} \ + org.eclipse.equinox.launcher.Main \ + -console ${daemonport} \ + -consoleLog & + daemonpid=$! + echo ${daemonpid} > ${pidfile} +elif [ "${consolestart}" -eq 1 ]; then + if [ -e "${pidfile}" ]; then + echo "Another instance of controller running, check with $0 -status" + exit -1 + fi + $JAVA_HOME/bin/java ${extraJVMOpts} \ + -Djava.io.tmpdir=${basedir}/work/tmp \ + -Dosgi.install.area=${basedir} \ + -Dosgi.configuration.area=${basedir}/configuration \ + -Dosgi.frameworkClassPath=${FWCLASSPATH} \ + -Dosgi.framework=file:${basedir}/lib/org.eclipse.osgi-3.8.1.v20120830-144521.jar \ + -classpath ${CLASSPATH} \ + org.eclipse.equinox.launcher.Main \ + -console \ + -consoleLog +fi