#!/bin/sh ### BEGIN INIT INFO # Provides: activemq # Required-Start: $remote_fs $network $syslog # Required-Stop: $remote_fs $network $syslog # Default-Start: 3 5 # Default-Stop: 0 1 6 # Short-Description: Starts ActiveMQ # Description: Starts ActiveMQ Message Broker Server ### END INIT INFO # ------------------------------------------------------------------------ # 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. # ------------------------------------------------------------------------ # # This script controls standalone Apache ActiveMQ service processes. # To ensure compatibility to macosx and cygwin we do not utilize # lsb standard infrastructure for controlling daemons like # "start-stop-daemon". # # See also http://activemq.apache.org/activemq-command-line-tools-reference.html # for additional commandline arguments # # System variables for this script, like ACTIVEMQ_OPTS and ACTIVEMQ_OPTS_MEMORY, # can be configured in 'env' script located in this directory. # # For more information on configuring the script, see http://activemq.apache.org/unix-shell-script.html # # # Authors: # Marc Schoechlin # ------------------------------------------------------------------------ # IMPROVED DEBUGGING (execute with bash -x) # export PS4=' ${BASH_SOURCE}:${LINENO}(${FUNCNAME[0]}) ' # # Backup invocation parameters COMMANDLINE_ARGS="$@" EXEC_OPTION="" # ------------------------------------------------------------------------ # HELPERS # a simple helper to get the current user setCurrentUser(){ CUSER="`whoami 2>/dev/null`" # Solaris hack if [ ! $? -eq 0 ]; then CUSER="`/usr/ucb/whoami 2>/dev/null`" fi } # get a canonical path, macosx and slowlaris does not support radlink -f :-) pathCanonical() { local dst="${1}" while [ -h "${dst}" ] ; do ls=`ls -ld "${dst}"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then dst="$link" else dst="`dirname "${dst}"`/$link" fi done local bas="`basename "${dst}"`" local dir="`dirname "${dst}"`" if [ "$bas" != "$dir" ]; then dst="`pathCanonical "$dir"`/$bas" fi echo "${dst}" | sed -e 's#//#/#g' -e 's#/\./#/#g' -e 's#/[^/]*/\.\./#/#g' } # a simple helper to get the activemq installation dir getActiveMQHome(){ # get the real path to the binary local REAL_BIN="`pathCanonical $0`" local REAL_DIR="`dirname $REAL_BIN`/../" REAL_DIR="`cd $REAL_DIR && pwd -P`" if [ -z "$REAL_DIR" ];then echo 'ERROR: unable to find real installtion path fo activemq, you have to define ACTIVEMQ_HOME manually in the config' >&2 exit 1 fi echo "$REAL_DIR/" } # Active MQ installation dir if [ -z "$ACTIVEMQ_HOME" ] ; then ACTIVEMQ_HOME="`getActiveMQHome`" fi # Active MQ base dir if [ -z "$ACTIVEMQ_BASE" ] ; then ACTIVEMQ_BASE="$ACTIVEMQ_HOME" fi # Configure user specified classpath here or externally using this variable if [ -z "$ACTIVEMQ_USER_CLASSPATH" ] ; then ACTIVEMQ_USER_CLASSPATH="" fi # ActiveMQ Classpath configuration ACTIVEMQ_CLASSPATH="$ACTIVEMQ_BASE/../lib/:$ACTIVEMQ_USER_CLASSPATH" # Active MQ configuration directory if [ -z "$ACTIVEMQ_CONF" ] ; then # For backwards compat with old variables we let ACTIVEMQ_CONFIG_DIR set ACTIVEMQ_CONF if [ -z "$ACTIVEMQ_CONFIG_DIR" ] ; then ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf" else ACTIVEMQ_CONF="$ACTIVEMQ_CONFIG_DIR" fi fi # Configure a user with non root privileges, if no user is specified do not change user if [ -z "$ACTIVEMQ_USER" ] ; then ACTIVEMQ_USER="" fi # Active MQ data directory if [ -z "$ACTIVEMQ_DATA" ] ; then # For backwards compat with old variables we let ACTIVEMQ_DATA_DIR set ACTIVEMQ_DATA if [ -z "$ACTIVEMQ_DATA_DIR" ] ; then ACTIVEMQ_DATA="$ACTIVEMQ_BASE/data" else ACTIVEMQ_DATA="$ACTIVEMQ_DATA_DIR" fi fi if [ -z "$ACTIVEMQ_TMP" ] ; then ACTIVEMQ_TMP="$ACTIVEMQ_BASE/tmp" fi if [ ! -d "$ACTIVEMQ_DATA" ]; then setCurrentUser if ( [ -z "$ACTIVEMQ_USER" ] || [ "$ACTIVEMQ_USER" = "$CUSER" ] );then mkdir $ACTIVEMQ_DATA elif [ "`id -u`" = "0" ];then su -c "mkdir $ACTIVEMQ_DATA" - $ACTIVEMQ_USER; fi fi # Location of the pidfile if [ -z "$ACTIVEMQ_PIDFILE" ]; then ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq.pid" fi # ------------------------------------------------------------------------ # LOAD CONFIGURATION # CONFIGURATION # For using instances if ( basename $0 | grep "activemq-instance-" > /dev/null);then INST="`basename $0|sed 's/^activemq-instance-//;s/\.sh$//'`" ACTIVEMQ_CONFIGS="/etc/default/activemq-instance-${INST} $HOME/.activemqrc-instance-${INST}" echo "INFO: Using alternative activemq configuration files: $ACTIVEMQ_CONFIGS" else ACTIVEMQ_CONFIGS="/etc/default/activemq $HOME/.activemqrc $ACTIVEMQ_HOME/bin/env" fi # load activemq configuration CONFIG_LOAD="no" for ACTIVEMQ_CONFIG in $ACTIVEMQ_CONFIGS;do if [ -f "$ACTIVEMQ_CONFIG" ] ; then ( . $ACTIVEMQ_CONFIG >/dev/null 2>&1 ) if [ "$?" != "0" ];then echo "ERROR: There are syntax errors in '$ACTIVEMQ_CONFIG'" exit 1 else echo "INFO: Loading '$ACTIVEMQ_CONFIG'" . $ACTIVEMQ_CONFIG CONFIG_LOAD="yes" break fi fi done # inform user that default configuration is loaded, no suitable configfile found if [ "$CONFIG_LOAD" != "yes" ];then echo "INFO: Using default configuration"; echo " Configurations are loaded in the following order: $ACTIVEMQ_CONFIGS" echo fi if [ -z "$ACTIVEMQ_OPTS" ] ; then ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config" fi # ------------------------------------------------------------------------ # OS SPECIFIC SUPPORT OSTYPE="unknown" case "`uname`" in CYGWIN*) OSTYPE="cygwin" ;; Darwin*) OSTYPE="darwin" if [ -z "$JAVA_HOME" ] && [ "$JAVACMD" = "auto" ];then JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home fi ;; esac # For Cygwin, ensure paths are in UNIX format before anything is touched if [ "$OSTYPE" = "cygwin" ]; then [ -n "$ACTIVEMQ_HOME" ] && ACTIVEMQ_HOME="`cygpath --unix "$ACTIVEMQ_HOME"`" [ -n "$JAVA_HOME" ] && JAVA_HOME="`cygpath --unix "$JAVA_HOME"`" [ -n "$ACTIVEMQ_CLASSPATH" ] && ACTIVEMQ_CLASSPATH="`cygpath --path --unix "$ACTIVEMQ_CLASSPATH"`" fi # Detect the location of the java binary if [ -z "$JAVACMD" ] || [ "$JAVACMD" = "auto" ] ; then if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi fi fi # Hm, we still do not know the location of the java binary if [ ! -x "$JAVACMD" ] ; then JAVACMD=`which java 2> /dev/null ` if [ -z "$JAVACMD" ] ; then JAVACMD=java fi fi # Stop here if no java installation is defined/found if [ ! -x "$JAVACMD" ] ; then echo "ERROR: Configuration variable JAVA_HOME or JAVACMD is not defined correctly." echo " (JAVA_HOME='$JAVA_HOME', JAVACMD='$JAVACMD')" exit 1 fi echo "INFO: Using java '$JAVACMD'" if [ -z "$ACTIVEMQ_BASE" ] ; then ACTIVEMQ_BASE="$ACTIVEMQ_HOME" fi # For Cygwin, switch paths to Windows format before running java if [ "$OSTYPE" = "cygwin" ]; then if [ "$OSTYPE" = "cygwin" ];then ACTIVEMQ_HOME="`cygpath --windows "$ACTIVEMQ_HOME"`" ACTIVEMQ_BASE="`cygpath --windows "$ACTIVEMQ_BASE"`" ACTIVEMQ_CONF="`cygpath --windows "$ACTIVEMQ_CONF"`" ACTIVEMQ_DATA="`cygpath --windows "$ACTIVEMQ_DATA"`" ACTIVEMQ_CLASSPATH=`cygpath --path --windows "$ACTIVEMQ_CLASSPATH"` [ -n "$JAVA_HOME" ] && JAVA_HOME="`cygpath --windows "$JAVA_HOME"`" CYGHOME="`cygpath --windows "$HOME"`" ACTIVEMQ_TMP="`cygpath --windows "$ACTIVEMQ_TMP"`" if [ -n "$CYGHOME" ]; then ACTIVEMQ_CYGWIN="-Dcygwin.user.home=\"$CYGHOME\"" fi fi # Set default classpath # Add instance conf dir before AMQ install conf dir to pick up instance-specific classpath entries first ACTIVEMQ_CLASSPATH="${ACTIVEMQ_CONF}:${ACTIVEMQ_CLASSPATH}" if [ "$OSTYPE" = "cygwin" ];then # remove training backslashes to prevent quoting problems ACTIVEMQ_CLASSPATH="`echo ${ACTIVEMQ_CLASSPATH}|sed '~s,[\\]*$,,g'`" ACTIVEMQ_HOME="`echo ${ACTIVEMQ_HOME}|sed '~s,[\\]*$,,g'`" ACTIVEMQ_BASE="`echo ${ACTIVEMQ_BASE}|sed '~s,[\\]*$,,g'`" ACTIVEMQ_CONF="`echo ${ACTIVEMQ_CONF}|sed '~s,[\\]*$,,g'`" ACTIVEMQ_DATA="`echo ${ACTIVEMQ_DATA}|sed '~s,[\\]*$,,g'`" fi # Start the ActiveMQ JAR # # # @ARG1 : the name of the PID-file # If specified, this function starts the java process in background as a daemon # and stores the pid of the created process in the file. # Output on stdout/stderr will be supressed if this parameter is specified # @RET : If unless 0 something went wrong # # Note: This function uses a lot of globally defined variables # - if $ACTIVEMQ_USER is set, the function tries starts the java process whith the specified # user invokeJar(){ PIDFILE="$1" TASK_TODO="$2" RET="1" if [ ! -f "${ACTIVEMQ_HOME}/bin/activemq.jar" ];then echo "ERROR: '${ACTIVEMQ_HOME}/bin/activemq.jar' does not exist, define ACTIVEMQ_HOME in the config" exit 1 fi setCurrentUser if ( [ -z "$ACTIVEMQ_USER" ] || [ "$ACTIVEMQ_USER" = "$CUSER" ] );then DOIT_PREFIX="sh -c " DOIT_POSTFIX=";" elif [ "`id -u`" = "0" ];then DOIT_PREFIX="su -s /bin/sh -c " DOIT_POSTFIX=" - $ACTIVEMQ_USER" echo "INFO: changing to user '$ACTIVEMQ_USER' to invoke java" fi # Execute java binary if [ -n "$TASK_TODO" ] && [ "$TASK_TODO" != "stop" ];then if [ -z "$ACTIVEMQ_OUT" ]; then ACTIVEMQ_OUT="/dev/null" fi $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \ -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \ -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \ -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \ -Dactivemq.conf=\"${ACTIVEMQ_CONF}\" \ -Dactivemq.data=\"${ACTIVEMQ_DATA}\" \ $ACTIVEMQ_CYGWIN \ -jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS >> $ACTIVEMQ_OUT 2>&1 & RET=\"\$?\"; APID=\"\$!\"; echo \$APID > "${PIDFILE}"; echo \"INFO: pidfile created : '${PIDFILE}' (pid '\$APID')\";exit \$RET" $DOIT_POSTFIX RET="$?" elif [ -n "$TASK_TODO" ] && [ "$TASK_TODO" = "stop" ];then SPID="`cat "${PIDFILE}"`" $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \ -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \ -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \ -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \ -Dactivemq.conf=\"${ACTIVEMQ_CONF}\" \ -Dactivemq.data=\"${ACTIVEMQ_DATA}\" \ $ACTIVEMQ_CYGWIN \ -jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS --pid $SPID & RET=\"\$?\"; APID=\"\$!\"; echo \$APID > "${PIDFILE}.stop"; exit \$RET" $DOIT_POSTFIX RET="$?" else $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \ -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \ -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \ -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \ -Dactivemq.conf=\"${ACTIVEMQ_CONF}\" \ -Dactivemq.data=\"${ACTIVEMQ_DATA}\" \ $ACTIVEMQ_CYGWIN \ -jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS" $DOIT_POSTFIX RET="$?" fi return $RET } # Check if ActiveMQ is running # # @RET : 0 => the activemq process is running # 1 => process id in $ACTIVEMQ_PIDFILE does not exist anymore # 2 => something is wrong with the pid file # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file checkRunning(){ if [ -f "$ACTIVEMQ_PIDFILE" ]; then if [ -z "`cat $ACTIVEMQ_PIDFILE`" ];then echo "ERROR: Pidfile '$ACTIVEMQ_PIDFILE' exists but contains no pid" return 2 fi ACTIVEMQ_PID="`cat ${ACTIVEMQ_PIDFILE}`" RET="`ps -p "${ACTIVEMQ_PID}"|grep java`" if [ -n "$RET" ];then return 0; else return 1; fi else return 1; fi } checkStopRunning(){ PID_STOP="${ACTIVEMQ_PIDFILE}.stop" if [ -f "$PID_STOP" ]; then if [ -z "`cat $PID_STOP`" ];then echo "ERROR: Pidfile os stop process '$PID_STOP' exists but contains no pid" return 2 fi THEPID=`cat ${PID_STOP}` RET=`ps -p $THEPID|grep java` if [ -n "$RET" ];then return 0; else return 1; fi else return 1; fi } # Check if ActiveMQ is running # # @RET : 0 => the activemq process is running # 1 => the activemq process is not running # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file invoke_status(){ if ( checkRunning );then PID="`cat $ACTIVEMQ_PIDFILE`" echo "ActiveMQ is running (pid '$PID')" exit 0 fi echo "ActiveMQ not running" exit 1 } # Start ActiveMQ if not already running # # @RET : 0 => is now started, is already started # !0 => something went wrong # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file # - $ACTIVEMQ_OPTS : Additional options # - $ACTIVEMQ_SUNJMX_START : options for JMX settings # - $ACTIVEMQ_SSL_OPTS : options for SSL encryption invoke_start(){ if ( checkRunning );then PID="`cat $ACTIVEMQ_PIDFILE`" echo "INFO: Process with pid '$PID' is already running" exit 0 fi ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SUNJMX_START $ACTIVEMQ_SSL_OPTS -Djava.awt.headless=true -Djava.io.tmpdir=\"${ACTIVEMQ_TMP}\"" echo "INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details" invokeJar "$ACTIVEMQ_PIDFILE" start exit "$?" } # Start ActiveMQ in foreground (for debugging) # # @RET : 0 => was started # 1 => was already started # !0 => somthing went wrong # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file # - $ACTIVEMQ_OPTS : Additional options # - $ACTIVEMQ_SUNJMX_START : options for JMX settings # - $ACTIVEMQ_SSL_OPTS : options for SSL encryption invoke_console(){ if ( checkRunning );then echo "ERROR: ActiveMQ is already running" exit 1 fi ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SUNJMX_START $ACTIVEMQ_SSL_OPTS -Djava.awt.headless=true -Djava.io.tmpdir=\"${ACTIVEMQ_TMP}\"" COMMANDLINE_ARGS="start `echo $COMMANDLINE_ARGS|sed 's,^console,,'`" EXEC_OPTION="exec" echo "INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C)" echo "INFO: Creating pidfile $ACTIVEMQ_PIDFILE" echo "$$" > "$ACTIVEMQ_PIDFILE" invokeJar "$ACTIVEMQ_PIDFILE" RET="$?" echo "INFO: removing pidfile $ACTIVEMQ_PIDFILE" exit "$RET" } # Kill ActiveMQ # @RET : 0 => stop was successful # !0 => something went wrong # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file invoke_kill(){ if ( checkRunning ); then ACTIVEMQ_PID="`cat ${ACTIVEMQ_PIDFILE}`" echo "INFO: sending SIGKILL to pid '$ACTIVEMQ_PID'" kill -KILL $ACTIVEMQ_PID RET="$?" rm -f "${ACTIVEMQ_PIDFILE}" return $RET fi echo "INFO: not running, nothing to do" return 0 } # Stop ActiveMQ # @RET : 0 => stop was successful # !0 => something went wrong # # Note: This function uses globally defined variables # - $ACTIVEMQ_PIDFILE : the name of the pid file # - $ACTIVEMQ_KILL_MAXSECONDS : the number of seconds to wait for termination of broker after sending # shutdown signal by jmx interface invoke_stop(){ RET="1" if ( checkRunning );then ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS" COMMANDLINE_ARGS="$COMMANDLINE_ARGS $ACTIVEMQ_SUNJMX_CONTROL" ACTIVEMQ_PID="`cat $ACTIVEMQ_PIDFILE`" invokeJar "$ACTIVEMQ_PIDFILE" "stop" RET="$?" FOUND="0" i=0 echo "INFO: Waiting at least $ACTIVEMQ_KILL_MAXSECONDS seconds for regular process termination of pid '$ACTIVEMQ_PID' : " while [ "$i" -le "$ACTIVEMQ_KILL_MAXSECONDS" ]; do if [ ! checkStopRunning ];then if [ ! checkRunning ]; then echo " FINISHED" FOUND="1" fi break fi if (checkRunning);then sleep 1 printf "." else echo " TERMINATED" FOUND="1" break fi i="`expr $i + 1`" done if [ "$FOUND" -ne "1" ];then echo echo "INFO: Regular shutdown not successful, sending SIGKILL to process" invoke_kill RET="$?" fi elif [ -f "$ACTIVEMQ_PIDFILE" ];then echo "ERROR: No or outdated process id in '$ACTIVEMQ_PIDFILE'" echo echo "INFO: Removing $ACTIVEMQ_PIDFILE" else echo "ActiveMQ not running" exit 0 fi rm -f "$ACTIVEMQ_PIDFILE" >/dev/null 2>&1 rm -f "$ACTIVEMQ_DATA/stop.pid" >/dev/null 2>&1 exit $RET } # Invoke a task on a running ActiveMQ instance # # $1 : "checkforrunning", do not invoke the task if activemq is not # active # , invoke task always # @RET : 0 => successful # !0 => something went wrong # # Note: This function uses globally defined variables # - $ACTIVEMQ_QUEUEMANAGERURL : The url of the queuemanager # - $ACTIVEMQ_OPTS : Additional options # - $ACTIVEMQ_SUNJMX_START : options for JMX settings # - $ACTIVEMQ_SSL_OPTS : options for SSL encryption invoke_task(){ local CHECKRUNNING="$1" ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS" if [ "$CHECKRUNNING" = "checkforrunning" ];then if ( ! checkRunning );then echo "Activemq is not running." exit 1 fi elif [ "$CHECKRUNNING" = "checkfornotrunning" ];then if ( checkRunning );then echo "Activemq is running." exit 1 fi fi # call task in java binary if [ "$1" = "browse" ] && [ -n "$ACTIVEMQ_QUEUEMANAGERURL" ];then COMMANDLINE_ARGS="$ACTIVEMQ_QUEUEMANAGERURL `echo $COMMANDLINE_ARGS|sed 's,^browse,,'`" elif [ "$1" = "query" ] && [ -n "$ACTIVEMQ_QUEUEMANAGERURL" ];then COMMANDLINE_ARGS="$ACTIVEMQ_SUNJMX_CONTROL `echo $COMMANDLINE_ARGS|sed 's,^query,,'`" else COMMANDLINE_ARGS="$COMMANDLINE_ARGS $ACTIVEMQ_SUNJMX_CONTROL" fi invokeJar "$ACTIVEMQ_PIDFILE" RET="$?" exit $RET } show_help() { invokeJar "$ACTIVEMQ_PIDFILE"|sed "s,Usage: Main,Usage: $0," cat << EOF Tasks provided by the sysv init script: kill - terminate instance in a drastic way by sending SIGKILL restart - stop running instance (if there is one), start new instance console - start broker in foreground, useful for debugging purposes status - check if activemq process is running Configuration of this script: The configuration of this script is read from the following files: $ACTIVEMQ_CONFIGS This script searches for the files in the listed order and reads the first available file. Modify $ACTIVEMQ_BASE/bin/env or create a copy of that file on a suitable location. To use additional configurations for running multiple instances on the same operating system rename or symlink script to a name matching to activemq-instance-. This changes the configuration location to /etc/default/activemq-instance- and \$HOME/.activemqrc-instance-. EOF exit 1 } # ------------------------------------------------------------------------ # MAIN # show help if [ -z "$1" ];then show_help fi case "$1" in status) invoke_status ;; restart) if ( checkRunning );then $0 stop echo fi $0 start $0 status ;; start) invoke_start ;; console) invoke_console exit $? ;; stop) invoke_stop exit $? ;; kill) invoke_kill exit $? ;; *) invoke_task exit $? esac