Hello ActiveMQ developers,
i wrote a new initscript for running standalone activemq installations
(see attached script).
This script is originally based on the scripts "activemq" and
"activemq-admin" located in
"assembly/src/release/bin/" and replaces both scripts.
Read "usage-examples.txt" for getting a first impression of the initscript.
Features of the new script:
- the script should be compatible with cygwin, macosx and most linux and
unix systems
To ensure compatibility to macosx and cygwin it does not utilize lsb
standard infrastructure for controlling daemons like
"start-stop-daemon".
(i tried to keep the shell-syntax compatible to most unix systems,
but only tested on SLES11 and Ubuntu 9.10)
- the complete functionality if "activemq-admin" is now included in
"activemq"
(list, query, browse, ...)
- all option not implemented by the initscript, are directly passed to
the java-call
- the configuration parameters can be located in
/etc/default/activemq.conf or $HOME/.activemqrc
- the script supports operation of multiple instances on the same system
(if the script is symlinked/renamed to
"activemq-instance-<INSTANCENAME>", the configuration
is searched on /etc/default/activemq-instance-<INSTANCENAME>.conf and
$HOME/.activemqrc-instance-<INSTANCENAME>)
- in case of syntax-errors in the configuration, the execution is stopped
- a template configuration for the script can be created by using the
"setup" option
- activemq configuration- and data-dir (e.g. kahadb, tmpstorage) are
configurable
- configuration hints for jmx (because of non-available
"VirtualMachine.attach(PID)", especially needed when using a ibm jvms)
- improved shutdown procedure: script invokes shutdown by a jmx-request,
if process does not disappear
after a configurable timeout, the process is killed by SIGKILL (-9)
- start activemq daemon as an background process : option "start"
- start activemq daemon without daemonizing the daemon: option "fgstart"
- usage of PID files to determine running activemq instances
- the "status" option, checks if there is a running activemq instance
(this is useful for using activemq with high-availability tools)
- the script outputs usage-information if it is invoked without any option
(usage of the java binary combined with the script-usage)
In my opinion it would be good/nice:
- if this script is will be tested on several unix-systems and on cygwin
- to provide the possibility to configure the entire jmx-setup in
activemq.xml or jetty.xml
(if jetty provides this)
- it would be nice if the java code supports daemonizing
- if this script will be part of activemq, we should adapt the wiki pages
Feedback and improvement ideas are very welcome :-)
Best regards
Marc Schoechlin
#!/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 <[email protected]>
# ------------------------------------------------------------------------
# CONFIGURATION
ACTIVEMQ_CONFIGS="/etc/default/activemq.conf $HOME/.activemqrc"
# For using instances
if ( basename $0 | grep -q "activemq-instance-" );then
INST="$(basename $0|sed 's/^activemq-instance-//;s/\.sh$//')"
ACTIVEMQ_CONFIGS="/etc/default/activemq-instance-${INST}.conf
$HOME/.activemqrc-instance-${INST}"
echo "INFO: using alternative activemq configuration files:
$ACCTIVEMQ_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
ACTIVEMQ_HOME="/opt/activemq"
# Active MQ configuration directory
ACTIVEMQ_CONFIG_DIR="$ACTIVEMQ_HOME/conf"
# Active MQ configuration directory
ACTIVEMQ_DATA_DIR="$ACTIVEMQ_HOME/data"
# Location of the pidfile
ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA_DIR/activemq.pid"
# 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"
# Configure a user with non root priviledges, if no user is specified do not
change user
ACTIVEMQ_USER=""
# Set jvm memory configuration
ACTIVEMQ_OPTS_MEMORY="-Xms256M -Xmx256M"
# 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_CONFIG_DIR}/jmx.access:
# ---
# # The "monitorRole" role has readonly access.
# # The "controlRole" role has readwrite access.
# monitorRole readonly
# controlRole readwrite
# ---
#
# Example for ${ACTIVEMQ_CONFIG_DIR}/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_CONFIG_DIR}/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START
-Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONFIG_DIR}/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:11099/jmxrmi --jmxuser controlRole
--jmxpassword abcd1234"
ACTIVEMQ_SUNJMX_CONTROL=""
# Specify the queue manager URL for using "browse" option of sysv initscript
ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616"
# Set additional JSE arguments
ACTIVEMQ_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
ACTIVEMQ_KILL_MAXSECONDS="300"
## 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 thagt no configuration was loaded
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"
echo "$0 setup [ $(echo $ACTIVEMQ_CONFIGS|sed 's/[ ][ ]*/ | /') ]"
echo
fi
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
echo "INFO: it's recommend to limit access to '$2' to the priviledged user"
echo "INFO: (recommended: chown `whoami`:nogroup '$2'; chmod 600 '$2')"
exit $?
fi
# ------------------------------------------------------------------------
# OS SPECIFIC SUPPORT
OSTYPE="unknown"
case "`uname`" in
CYGWIN*) OSTYPE="cygwin" ;;
Darwin*)
OSTYPE="darwin"
if [ "$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" ] ; 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
# Stopt here if no java installation is defined/found
if [ ! -x "$JAVACMD" ] ; then
echo "ERROR: configuration varaiable JAVA_HOME or JAVACMD is not defined
correctly."
echo " (JAVA_HOME='$JAVAHOME', JAVACMD='$JAVACMD')"
exit 1
fi
echo "INFO: useing 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_CLASSPATH=`cygpath --path --windows "$ACTIVEMQ_CLASSPATH"`
JAVA_HOME=`cygpath --windows "$JAVA_HOME"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
CYGHOME=`cygpath --windows "$HOME"`
if [ -n "$CYGHOME" ]; then
ACTIVEMQ_CYGWIN="-Dcygwin.user.home=\"$CYGHOME\""
fi
fi
# Set default classpath
ACTIVEMQ_CLASSPATH="${ACTIVEMQ_CONFIG_DIR}/;${ACTIVEMQ_CLASSPATH}"
# Backup invocation parameters
COMMANDLINE_ARGS="$@"
# ------------------------------------------------------------------------
# HELPER FUNCTIONS
# Start the ActiveMQ JAR
#
# This function uses a lot of globally defined variables
invokeJar(){
local PIDFILE="$1"
local RET="1"
local CUSER="$(whoami)"
if ( ! [ -f "${ACTIVEMQ_HOME}/bin/run.jar" ] );then
echo "ERROR: '${ACTIVEMQ_HOME}/bin/run.jar' does not exist"
exit 1
fi
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" ];then
$DOIT_PREFIX "cd $ACTIVEMQ_CONFIG_DIR; $JAVACMD $ACTIVEMQ_OPTS
$ACTIVEMQ_DEBUG_OPTS \
-Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
-Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
-Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
$ACTIVEMQ_CYGWIN \
-jar \"${ACTIVEMQ_HOME}/bin/run.jar\" $COMMANDLINE_ARGS
>/dev/null 2>&1 &
RET=\"\$?\"; APID=\"\$!\";
echo \$APID > $PIDFILE;
echo \"INFO: pidfile created : '$PIDFILE' (pid '\$APID')\";exit
\$RET" $DOIT_POSTFIX
RET="$?"
else
$DOIT_PREFIX "cd $ACTIVEMQ_CONFIG_DIR; $JAVACMD $ACTIVEMQ_OPTS
$ACTIVEMQ_DEBUG_OPTS \
-Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
-Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
-Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
$ACTIVEMQ_CYGWIN \
-jar \"${ACTIVEMQ_HOME}/bin/run.jar\" $COMMANDLINE_ARGS"
$DOIT_POSTFIX
RET="$?"
fi
return $RET
}
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
if (ps -p $(cat $ACTIVEMQ_PIDFILE)|grep java >/dev/null);then
return 0;
else
return 1;
fi
else
return 1;
fi
}
invoke_status(){
if ( checkRunning );then
echo "Activemq is running (pid '$(cat $ACTIVEMQ_PIDFILE)')"
exit 0
fi
echo "Activemq not running"
exit 1
}
invoke_start(){
if ( checkRunning );then
echo "INFO: process with pid '$(cat $ACTIVEMQ_PIDFILE)' is already
running"
exit 0
fi
if [ -z "$ACTIVEMQ_OPTS" ] ; then
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY
-Dorg.apache.activemq.UseDedicatedTaskRunner=true
-Djava.util.logging.config.file=logging.properties"
fi
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SUNJMX_START $ACTIVEMQ_SSL_OPTS"
echo "INFO: starting - inspect logfiles specified in logging.properties and
log4j.properties to get details"
invokeJar $ACTIVEMQ_PIDFILE
exit "$?"
}
invoke_fgstart(){
if ( checkRunning );then
echo "ERROR: activemq is already running"
exit 1
fi
if [ -z "$ACTIVEMQ_OPTS" ] ; then
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY
-Dorg.apache.activemq.UseDedicatedTaskRunner=true
-Djava.util.logging.config.file=logging.properties"
fi
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SUNJMX_START $ACTIVEMQ_SSL_OPTS"
COMMANDLINE_ARGS="start $(echo $COMMANDLINE_ARGS|sed 's,^fgstart,,')"
echo "INFO: starting in foreeground, this is just for debugging purposes
(stop process by pressing CTRL+c)"
invokeJar
exit "$?"
}
invoke_stop(){
RET="1"
if ( checkRunning );then
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS $ACTIVEMQ_SSL_OPTS"
COMMANDLINE_ARGS="$COMMANDLINE_ARGS $ACTIVEMQ_SUNJMX_CONTROL"
invokeJar
RET="$?"
echo -n "INFO: waiting at least $ACTIVEMQ_KILL_MAXSECONDS seconds for
regular process termination of pid '$(cat $ACTIVEMQ_PIDFILE)' : "
FOUND="0"
for i in `seq 0 $ACTIVEMQ_KILL_MAXSECONDS` ;do
if (checkRunning);then
sleep 1
echo -n "."
else
echo " FINISHED"
FOUND="1"
break
fi
done
if [ "$FOUND" -ne "1" ];then
echo "INFO: regular shutdown not successful, sending SIGKILL to
process with pid '$(cat $ACTIVEMQ_PIDFILE)'"
kill -KILL $(cat $ACTIVEMQ_PIDFILE)
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
exit 0
fi
rm -f $ACTIVEMQ_PIDFILE >/dev/null 2>&1
exit $RET
}
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
echo "INFO: activemq not running"
exit 1
fi
}
# ------------------------------------------------------------------------
# MAIN
# show help
if [ -z "$1" ];then
invokeJar
RET="$?"
cat << EOF
Tasks provided by the sysv init script:
restart - stop running instance (is there is one), start new
instance
fgstart - start daemon in foreground, usful 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.conf or $HOME/.activemqrc.
To use addtional 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>.conf and
\$HOME/.activemqrc-instance-<INSTANCENAME>. Configuration files in /etc
have higher precedence.
EOF
exit $RET
fi
case "$1" in
status)
invoke_status
;;
restart)
if ( checkRunning );then
$0 stop
fi
$0 status
$0 start
$0 status
;;
start)
invoke_start
;;
fgstart)
invoke_fgstart
;;
stop)
invoke_stop
;;
*)
invoke_task
esac
# vim:ai et ts=2 shiftwidth=2 expandtab tabstop=3:
$ ./activemq start
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
INFO: starting - inspect logfiles specified in logging.properties and
log4j.properties to get details
INFO: pidfile created :
'/home/mschoechlin/temp/apache-activemq-data/activemq.pid' (pid '11283')
$ ./activemq restart
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Java Runtime: Sun Microsystems Inc. 1.6.0_16
/usr/lib/jvm/java-6-sun-1.6.0.16/jre
Heap sizes: current=59776k free=59151k max=886592k
JVM args:
-Dactivemq.classpath=/home/mschoechlin/temp/apache-activemq-data/conf/;
-Dactivemq.home=/home/mschoechlin/temp/apache-activemq-5.3.0
-Dactivemq.base=/home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_HOME: /home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_BASE: /home/mschoechlin/temp/apache-activemq-5.3.0
Stopping broker: localhost
INFO: waiting at least 300 seconds for regular process termination of pid
'11283' : FINISHED
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Activemq not running
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
INFO: starting - inspect logfiles specified in logging.properties and
log4j.properties to get details
INFO: pidfile created :
'/home/mschoechlin/temp/apache-activemq-data/activemq.pid' (pid '11407')
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Activemq is running (pid '11407')
$ ./activemq list
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Java Runtime: Sun Microsystems Inc. 1.6.0_16
/usr/lib/jvm/java-6-sun-1.6.0.16/jre
Heap sizes: current=59776k free=59151k max=886592k
JVM args:
-Dactivemq.classpath=/home/mschoechlin/temp/apache-activemq-data/conf/;
-Dactivemq.home=/home/mschoechlin/temp/apache-activemq-5.3.0
-Dactivemq.base=/home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_HOME: /home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_BASE: /home/mschoechlin/temp/apache-activemq-5.3.0
BrokerName = localhost
$ ./activemq query
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Java Runtime: Sun Microsystems Inc. 1.6.0_16
/usr/lib/jvm/java-6-sun-1.6.0.16/jre
Heap sizes: current=59776k free=59151k max=886592k
JVM args:
-Dactivemq.classpath=/home/mschoechlin/temp/apache-activemq-data/conf/;
-Dactivemq.home=/home/mschoechlin/temp/apache-activemq-5.3.0
-Dactivemq.base=/home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_HOME: /home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_BASE: /home/mschoechlin/temp/apache-activemq-5.3.0
DequeueCount = 0
Name = ddddddddd
MinEnqueueTime = 0
CursorMemoryUsage = 0
MaxAuditDepth = 2048
Destination = ddddddddd
AverageEnqueueTime = 0.0
InFlightCount = 0
MemoryLimit = 1048576
Type = Queue
EnqueueCount = 0
MaxEnqueueTime = 0
MemoryUsagePortion = 0.0
ProducerCount = 0
UseCache = true
MaxProducersToAudit = 32
CursorFull = false
BrokerName = localhost
ConsumerCount = 0
ProducerFlowControl = true
Subscriptions = []
QueueSize = 0
MaxPageSize = 200
CursorPercentUsage = 0
MemoryPercentUsage = 0
DispatchCount = 0
ExpiredCount = 0
...
...
$ ./activemq fgstart
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
ERROR: activemq is already running
$ ./activemq stop
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
Java Runtime: Sun Microsystems Inc. 1.6.0_16
/usr/lib/jvm/java-6-sun-1.6.0.16/jre
Heap sizes: current=59776k free=59151k max=886592k
JVM args:
-Dactivemq.classpath=/home/mschoechlin/temp/apache-activemq-data/conf/;
-Dactivemq.home=/home/mschoechlin/temp/apache-activemq-5.3.0
-Dactivemq.base=/home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_HOME: /home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_BASE: /home/mschoechlin/temp/apache-activemq-5.3.0
Stopping broker: localhost
INFO: waiting at least 300 seconds for regular process termination of pid
'11407' : FINISHED
$ ./activemq fgstart
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: useing java '/usr/bin/java'
INFO: starting in foreeground, this is just for debugging purposes (stop
process by pressing CTRL+c)
Java Runtime: Sun Microsystems Inc. 1.6.0_16
/usr/lib/jvm/java-6-sun-1.6.0.16/jre
Heap sizes: current=251264k free=247327k max=251264k
JVM args: -Xms256M -Xmx256M
-Dorg.apache.activemq.UseDedicatedTaskRunner=true
-Djava.util.logging.config.file=logging.properties
-Dcom.sun.management.jmxremote.port=11099
-Dcom.sun.management.jmxremote.password.file=/home/mschoechlin/temp/apache-activemq-data/conf/jmx.password
-Dcom.sun.management.jmxremote.access.file=/home/mschoechlin/temp/apache-activemq-data/conf/jmx.access
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote
-Dactivemq.classpath=/home/mschoechlin/temp/apache-activemq-data/conf/;
-Dactivemq.home=/home/mschoechlin/temp/apache-activemq-5.3.0
-Dactivemq.base=/home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_HOME: /home/mschoechlin/temp/apache-activemq-5.3.0
ACTIVEMQ_BASE: /home/mschoechlin/temp/apache-activemq-5.3.0
Loading message broker from: xbean:activemq.xml
INFO | Using Persistence Adapter:
org.apache.activemq.store.kahadb.kahadbpersistenceadap...@1cb1a4e2
INFO | Replayed 1 operations from the journal in 0.019 seconds.
INFO | ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
INFO | For help or more information please see: http://activemq.apache.org/
INFO | Listening for connections at: tcp://lt-msch:61616
INFO | Connector openwire Started
INFO | ActiveMQ JMS Message Broker (localhost,
ID:lt-msch-37931-1257840732525-0:0) started
INFO | Logging to org.slf4j.impl.JCLLoggerAdapter(org.mortbay.log) via
org.mortbay.log.Slf4jLog
INFO | jetty-6.1.9
INFO | ActiveMQ WebConsole initialized.
INFO | Initializing Spring FrameworkServlet 'dispatcher'
INFO | ActiveMQ Console at http://0.0.0.0:8161/admin
INFO | Initializing Spring root WebApplicationContext
INFO | Connector vm://localhost Started
INFO | Camel Console at http://0.0.0.0:8161/camel
INFO | ActiveMQ Web Demos at http://0.0.0.0:8161/demo
INFO | RESTful file access application at http://0.0.0.0:8161/fileserver
INFO | Started [email protected]:8161
^C INFO | ActiveMQ Message Broker (localhost,
ID:lt-msch-37931-1257840732525-0:0) is shutting down
INFO | Connector openwire Stopped
INFO | Connector vm://localhost Stopped
INFO | ActiveMQ JMS Message Broker (localhost,
ID:lt-msch-37931-1257840732525-0:0) stopped
$ ./activemq setup /tmp/test.config
INFO: loading '/home/mschoechlin/.activemqrc'
INFO: creating configuration file: /tmp/test.config
INFO: it's recommend to limit access to '/tmp/test.config' to the priviledged
user
INFO: (recommended: chown mschoechlin:nogroup '/tmp/test.config'; chmod 600
'/tmp/test.config')
$ cat /tmp/test.config
# ------------------------------------------------------------------------
# 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
ACTIVEMQ_HOME="/opt/activemq"
# Active MQ configuration directory
ACTIVEMQ_CONFIG_DIR="$ACTIVEMQ_HOME/conf"
# Active MQ configuration directory
ACTIVEMQ_DATA_DIR="$ACTIVEMQ_HOME/data"
# Location of the pidfile
ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA_DIR/activemq.pid"
# 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"
# Configure a user with non root priviledges, if no user is specified do not
change user
ACTIVEMQ_USER=""
# Set jvm memory configuration
ACTIVEMQ_OPTS_MEMORY="-Xms256M -Xmx256M"
# 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_CONFIG_DIR}/jmx.access:
# ---
# # The "monitorRole" role has readonly access.
# # The "controlRole" role has readwrite access.
# monitorRole readonly
# controlRole readwrite
# ---
#
# Example for ${ACTIVEMQ_CONFIG_DIR}/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_CONFIG_DIR}/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START
-Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONFIG_DIR}/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:11099/jmxrmi --jmxuser controlRole
--jmxpassword abcd1234"
ACTIVEMQ_SUNJMX_CONTROL=""
# Specify the queue manager URL for using "browse" option of sysv initscript
ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616"
# Set additional JSE arguments
ACTIVEMQ_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
ACTIVEMQ_KILL_MAXSECONDS="300"