| #!/bin/sh |
| # ------------------------------------------------------------------------ |
| # 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 |
| # |
| # Authors: |
| # Marc Schoechlin <ms@256bit.org> |
| |
| # ------------------------------------------------------------------------ |
| # CONFIGURATION |
| ACTIVEMQ_CONFIGS="/etc/default/activemq $HOME/.activemqrc" |
| |
| # Backup invocation parameters |
| COMMANDLINE_ARGS="$@" |
| EXEC_OPTION="" |
| |
| # 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" |
| fi |
| |
| ## START:DEFAULTCONFIG |
| # ------------------------------------------------------------------------ |
| # Configuration file for running Apache Active MQ as standalone provider |
| # |
| # This file overwrites the predefined settings of the sysv init-script |
| # |
| # Active MQ installation dir |
| if [ -z "$ACTIVEMQ_HOME" ] ; then |
| # try to find ACTIVEMQ |
| if [ -d /opt/activemq ] ; then |
| ACTIVEMQ_HOME=/opt/activemq |
| fi |
| |
| if [ -d "${HOME}/opt/activemq" ] ; then |
| ACTIVEMQ_HOME="${HOME}/opt/activemq" |
| fi |
| |
| ## resolve links - $0 may be a link to activemq's home |
| PRG="$0" |
| progname=`basename "$0"` |
| saveddir=`pwd` |
| |
| # need this for relative symlinks |
| dirname_prg=`dirname "$PRG"` |
| cd "$dirname_prg" |
| |
| 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 |
| |
| ACTIVEMQ_HOME=`dirname "$PRG"`/.. |
| |
| cd "$saveddir" |
| |
| # make it fully qualified |
| ACTIVEMQ_HOME=`cd "$ACTIVEMQ_HOME" && pwd` |
| fi |
| |
| if [ -z "$ACTIVEMQ_BASE" ] ; then |
| ACTIVEMQ_BASE="$ACTIVEMQ_HOME" |
| fi |
| |
| # 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 priviledges, 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 |
| |
| setCurrentUser(){ |
| CUSER=`whoami 2>/dev/null` |
| |
| # Solaris fix |
| if [ ! $? -eq 0 ]; then |
| CUSER=`/usr/ucb/whoami 2>/dev/null` |
| 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-`hostname`.pid" |
| fi |
| |
| # Location of the java installation |
| # Specify the location of your java installation using JAVA_HOME, or specify the |
| # path to the "java" binary using JAVACMD |
| # (set JAVACMD to "auto" for automatic detection) |
| #JAVA_HOME="" |
| JAVACMD="auto" |
| |
| # Set jvm memory configuration |
| if [ -z "$ACTIVEMQ_OPTS_MEMORY" ] ; then |
| ACTIVEMQ_OPTS_MEMORY="-Xms1G -Xmx1G" |
| fi |
| |
| # Uncomment to enable audit logging |
| #ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.audit=true" |
| |
| # Set jvm jmx configuration |
| # This enables jmx access over a configured jmx-tcp-port. |
| # You have to configure the first four settings if you run a ibm jvm, caused by the |
| # fact that IBM's jvm does not support VirtualMachine.attach(PID). |
| # JMX access is needed for quering a running activemq instance to gain data or to |
| # trigger management operations. |
| # |
| # Example for ${ACTIVEMQ_CONF}/jmx.access: |
| # --- |
| # # The "monitorRole" role has readonly access. |
| # # The "controlRole" role has readwrite access. |
| # monitorRole readonly |
| # controlRole readwrite |
| # --- |
| # |
| # Example for ${ACTIVEMQ_CONF}/jmx.password: |
| # --- |
| # # The "monitorRole" role has password "abc123". |
| # # # The "controlRole" role has password "abcd1234". |
| # monitorRole abc123 |
| # controlRole abcd1234 |
| # --- |
| # |
| # ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=11099 " |
| # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password" |
| # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access" |
| # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false" |
| ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote" |
| |
| # Set jvm jmx configuration for controlling the broker process |
| # You only have to configure the first four settings if you run a ibm jvm, caused by the |
| # fact that IBM's jvm does not support VirtualMachine.attach(PID) |
| # (see also com.sun.management.jmxremote.port, .jmx.password.file and .jmx.access.file ) |
| #ACTIVEMQ_SUNJMX_CONTROL="--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi --jmxuser controlRole --jmxpassword abcd1234" |
| ACTIVEMQ_SUNJMX_CONTROL="" |
| |
| # Specify the queue manager URL for using "browse" option of sysv initscript |
| if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; then |
| ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616" |
| fi |
| |
| # Set additional JSE arguments |
| ACTIVEMQ_SSL_OPTS="$SSL_OPTS" |
| |
| # Uncomment to enable YourKit profiling |
| #ACTIVEMQ_DEBUG_OPTS="-agentlib:yjpagent" |
| |
| # Uncomment to enable remote debugging |
| #ACTIVEMQ_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" |
| |
| # ActiveMQ tries to shutdown the broker by jmx, |
| # after a specified number of seconds send SIGKILL |
| if [ -z "$ACTIVEMQ_KILL_MAXSECONDS" ]; then |
| ACTIVEMQ_KILL_MAXSECONDS=30 |
| fi |
| |
| ## END:DEFAULTCONFIG |
| |
| # ------------------------------------------------------------------------ |
| # LOAD CONFIGURATION |
| |
| # 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" |
| fi |
| fi |
| done |
| |
| # inform user that default configuration is loaded, no suitable configfile found |
| if [ "$CONFIG_LOAD" != "yes" ];then |
| if [ "$1" != "setup" ];then |
| echo "INFO: Using default configuration"; |
| echo "(you can configure options in one of these file: $ACTIVEMQ_CONFIGS)" |
| echo |
| echo "INFO: Invoke the following command to create a configuration file" |
| CONFIGS=`echo $ACTIVEMQ_CONFIGS|sed 's/[ ][ ]*/ | /'` |
| echo "$0 setup [ $CONFIGS ]" |
| echo |
| fi |
| fi |
| |
| if [ -z "$ACTIVEMQ_OPTS" ] ; then |
| ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Dhawtio.realm=activemq -Dhawtio.role=admins -Dhawtio.rolePrincipalClasses=org.apache.activemq.jaas.GroupPrincipal -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config" |
| fi |
| |
| # create configuration if requested |
| if [ "$1" = "setup" ];then |
| if [ -z "$2" ];then |
| echo "ERROR: Specify configuration file" |
| exit 1 |
| fi |
| echo "INFO: Creating configuration file: $2" |
| ( |
| P_STATE="0" |
| while read LINE ;do |
| if (echo "$LINE" | grep "START:DEFAULTCONFIG" >/dev/null );then |
| P_STATE="1" |
| continue; |
| fi |
| if (echo "$LINE" | grep "END:DEFAULTCONFIG" >/dev/null);then |
| P_STATE="0" |
| break; |
| fi |
| if [ "$P_STATE" -eq "1" ];then |
| echo $LINE |
| fi |
| done < $0 |
| ) > $2 |
| |
| setCurrentUser |
| |
| echo "INFO: It's recommend to limit access to '$2' to the priviledged user" |
| echo "INFO: (recommended: chown '$CUSER':nogroup '$2'; chmod 600 '$2')" |
| exit $? |
| 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 "$CLASSPATH" ] && |
| CLASSPATH="`cygpath --path --unix "$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='$JAVAHOME', 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"` |
| JAVA_HOME=`cygpath --windows "$JAVA_HOME"` |
| CLASSPATH=`cygpath --path --windows "$CLASSPATH"` |
| 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}" |
| |
| # 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" |
| RET="1" |
| |
| if [ ! -f "${ACTIVEMQ_HOME}/bin/activemq.jar" ];then |
| echo "ERROR: '${ACTIVEMQ_HOME}/bin/activemq.jar' does not exist" |
| 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 -c " |
| DOIT_POSTFIX=" - $ACTIVEMQ_USER" |
| echo "INFO: changing to user '$ACTIVEMQ_USER' to invoke java" |
| fi |
| # Execute java binary |
| if [ -n "$PIDFILE" ] && [ "$PIDFILE" != "stop" ];then |
| $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 >/dev/null 2>&1 & |
| RET=\"\$?\"; APID=\"\$!\"; |
| echo \$APID > $PIDFILE; |
| echo \"INFO: pidfile created : '$PIDFILE' (pid '\$APID')\";exit \$RET" $DOIT_POSTFIX |
| RET="$?" |
| elif [ -n "$PIDFILE" ] && [ "$PIDFILE" = "stop" ];then |
| PID=`cat $ACTIVEMQ_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 $PID & |
| RET=\"\$?\"; APID=\"\$!\"; |
| echo \$APID > $ACTIVEMQ_DATA/stop.pid; 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 |
| PID=`cat $ACTIVEMQ_PIDFILE` |
| RET=`ps -p $PID|grep java` |
| if [ -n "$RET" ];then |
| return 0; |
| else |
| return 1; |
| fi |
| else |
| return 1; |
| fi |
| } |
| |
| checkStopRunning(){ |
| PID=$ACTIVEMQ_DATA/stop.pid |
| if [ -f "$PID" ]; then |
| if [ -z "`cat $PID`" ];then |
| echo "ERROR: Pidfile '$PID' exists but contains no pid" |
| return 2 |
| fi |
| THEPID=`cat $PID` |
| 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 |
| exit "$?" |
| } |
| |
| # Start ActiveMQ in foreground (for debugging) |
| # |
| # @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_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)" |
| invokeJar |
| exit "$?" |
| } |
| |
| # 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" |
| invokeJar "stop" |
| RET="$?" |
| PID=`cat $ACTIVEMQ_PIDFILE` |
| echo "INFO: Waiting at least $ACTIVEMQ_KILL_MAXSECONDS seconds for regular process termination of pid '$PID' : " |
| FOUND="0" |
| i=1 |
| while [ $i != $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 " FINISHED" |
| 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 with pid '$PID'" |
| kill -KILL $PID |
| RET="1" |
| 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 |
| # |
| # @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(){ |
| # call task in java binary |
| if ( checkRunning );then |
| if [ "$1" = "browse" ] && [ -n "$ACTIVEMQ_QUEUEMANAGERURL" ];then |
| ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS" |
| COMMANDLINE_ARGS="$1 $ACTIVEMQ_QUEUEMANAGERURL `echo $COMMANDLINE_ARGS|sed 's,^browse,,'`" |
| elif [ "$1" = "query" ] && [ -n "$ACTIVEMQ_QUEUEMANAGERURL" ];then |
| ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS" |
| COMMANDLINE_ARGS="$1 $ACTIVEMQ_SUNJMX_CONTROL `echo $COMMANDLINE_ARGS|sed 's,^query,,'`" |
| else |
| ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS" |
| COMMANDLINE_ARGS="$COMMANDLINE_ARGS $ACTIVEMQ_SUNJMX_CONTROL" |
| fi |
| invokeJar |
| exit $? |
| else |
| invokeJar |
| exit 1 |
| fi |
| } |
| |
| show_help() { |
| invokeJar |
| RET="$?" |
| cat << EOF |
| Tasks provided by the sysv init script: |
| 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 |
| setup - create the specified configuration file for this init script |
| (see next usage section) |
| |
| Configuration of this script: |
| The configuration of this script can be placed on /etc/default/activemq or $HOME/.activemqrc. |
| To use additional configurations for running multiple instances on the same operating system |
| rename or symlink script to a name matching to activemq-instance-<INSTANCENAME>. |
| This changes the configuration location to /etc/default/activemq-instance-<INSTANCENAME> and |
| \$HOME/.activemqrc-instance-<INSTANCENAME>. Configuration files in /etc have higher precedence. |
| EOF |
| exit $RET |
| } |
| |
| # ------------------------------------------------------------------------ |
| # MAIN |
| |
| # show help |
| if [ -z "$1" ];then |
| show_help |
| fi |
| |
| case "$1" in |
| status) |
| invoke_status |
| ;; |
| restart) |
| if ( checkRunning );then |
| $0 stop |
| fi |
| $0 status |
| $0 start |
| $0 status |
| ;; |
| start) |
| invoke_start |
| ;; |
| console) |
| invoke_console |
| ;; |
| stop) |
| invoke_stop |
| ;; |
| *) |
| invoke_task |
| esac |