blob: 16ed7d4128e0bcec7932a435f622c7ad189bfa67 [file] [log] [blame]
<div class="wiki-content maincontent"><p><style type="text/css">/*<![CDATA[*/
div.rbtoc1513260960195 {padding: 0px;}
div.rbtoc1513260960195 ul {list-style: disc;margin-left: 0px;}
div.rbtoc1513260960195 li {margin-left: 0px;padding-left: 0px;}
/*]]>*/</style></p><div class="toc-macro rbtoc1513260960195">
<ul class="toc-indentation"><li><a shape="rect" href="#UnixShellScript-Functionaloverview">Functional overview</a></li><li><a shape="rect" href="#UnixShellScript-Configuringtheinit-script">Configuring the init-script</a>
<ul class="toc-indentation"><li><a shape="rect" href="#UnixShellScript-Version5.11.0andhigher">Version 5.11.0 and higher</a>
<ul class="toc-indentation"><li><a shape="rect" href="#UnixShellScript-Configurationfileoftheinit-script">Configuration file of the init-script</a></li><li><a shape="rect" href="#UnixShellScript-Versionsprior5.11.0">Versions prior 5.11.0</a></li></ul>
</li><li><a shape="rect" href="#UnixShellScript-Runningactivemqasaunixdaemon">Running activemq as a unix daemon</a></li><li><a shape="rect" href="#UnixShellScript-Runningmultipleinstances">Running multiple instances</a></li></ul>
</li><li><a shape="rect" href="#UnixShellScript-Testingandreportinginteroperabilityproblemsforunixplatforms">Testing and reporting interoperability problems for unix platforms</a></li></ul>
</div><h1 id="UnixShellScript-Functionaloverview">Functional overview</h1><p>From version 5.4.0 onwards, ActiveMQ comes with a enhanced shell script for starting, stopping and managing the broker in Unix environment. For basic <a shape="rect" href="activemq-command-line-tools-reference.html">activemq</a> and <a shape="rect" href="activemq-command-line-tools-reference.html">activemq-admin</a> scripts functionality take a look at <a shape="rect" href="activemq-command-line-tools-reference.html">ActiveMQ Command Line Tools Reference</a>.</p><p>This <code>activemq</code> script incorporate these two scripts into one and adds some new functionalities. On top of regular <code>activemq</code> and <code>activemq-admin</code> scripts, it adds the following features:</p><ul><li><p><strong>start</strong> - starts the broker in background. It saves process id in the <code>${ACTIVEMQ_DATA_DIR}/activemq.pid</code> for future reference. It accepts the same command line arguments like the original <code>activemq</code> script, so you can do something like</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq start xbean:conf/activemq-stomp.xml</pre>
</div></div></li><li><p><strong>console</strong> - starts the broker in foreground. It is basically the replacement for the old <code>activemq</code> script<br clear="none">(you can interrupt the )</p></li></ul><ul><li><strong>stop</strong> - stops the broker that is running in the background. It tries first to stop the broker using <a shape="rect" href="activemq-command-line-tools-reference.html">shutdown</a> task. If that task doesn't return in 30 seconds (configurable), it will kill the process.</li></ul><ul><li><strong>restart</strong> - stops the running instance (if there's one) and starts the new one</li></ul><ul><li><strong>status</strong> - checks if activemq process is running<br clear="none">(exitcode: 1 = broker is down, 0 = broker is up)</li></ul><ul><li><p><strong>create</strong> - create an ACTIVEMQ_BASE directory that separates a broker instance from its binaries, i.e., it creates copies of the ActiveMQ configuration files into the command-line specified directory and points to the binaries. You can start the broker with the <code>/bin</code> scripts in the newly created instance.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq create /path/to/brokers/mybroker </pre>
</div></div></li><li><p><strong>browse</strong> - Display selected messages in a specified destination</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq browse FOO.BAR # use broker connection from configuration
bin/activemq browse --amqurl tcp://localhost:61616 FOO.BAR</pre>
</div></div></li><li><p><strong>bstat</strong> - Performs a predefined query that displays useful statistics regarding the specified broker</p></li><li><p><strong>dstat</strong> - Performs a predefined query that displays useful tabular statistics regarding the specified destination type</p></li><li><p><strong>decrypt</strong> - Decrypts given text</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq decrypt --input 'BkiT42A0CZfL1SanJIgxvQ==' --password asdasdasdasd</pre>
</div></div></li><li><p><strong>encrypt</strong> - Encrypts given text</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq encrypt --password TESTPASSWORD --input FOOBAR</pre>
</div></div></li><li><p><strong>export</strong> - Exports a stopped brokers data files to an archive file for importing to another brokers like ActiveMQ Artemis</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">$ bin/activemq export --file=archivefile</pre>
</div></div></li><li><p><strong>list</strong> - Lists all available brokers in the specified JMX context</p></li><li><p><strong>purge</strong> - Delete selected destination's messages that matches the message selector</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq purge FOO.BAR # use jmx access data from configuration
bin/activemq purge --jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:11098/jmxrmi --jmxuser controlRole --jmxpassword abcd1234 FOO.BAR</pre>
</div></div></li><li><p><strong>query</strong> - Display selected broker component's attributes and statistics</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">bin/activemq query # use jmx access data from configuration
bin/activemq query --jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:11098/jmxrmi --jmxuser controlRole --jmxpassword abcd1234</pre>
</div></div></li></ul><h1 id="UnixShellScript-Configuringtheinit-script">Configuring the init-script</h1><p>For ActiveMQ server to run properly some basic system variables must be set. These variables define how much memory broker will have, SSL, logging, JAAS options and similar.</p><h2 id="UnixShellScript-Version5.11.0andhigher">Version 5.11.0 and higher</h2><h3 id="UnixShellScript-Configurationfileoftheinit-script">Configuration file of the init-script</h3><p>Since version 5.11.0, all default configuration variables are moved to the new <code>env</code> script file, so that they can be easily inspected and configured in a easy way. <br clear="none">There are also other configuration locations</p><p>The script scans the following locations for configurations in the following order:</p><ol><li>/etc/default/activemq</li><li>$HOME/.activemqrc</li><li>$INSTALLDIR/apache-activemq-&lt;version&gt;/bin/env</li></ol><p>The first existing file is read exclusively - all other files are ignored. <br clear="none">Undefined values are discovered in a automated way.</p><h3 id="UnixShellScript-Versionsprior5.11.0">Versions prior 5.11.0</h3><p>These parameters were configurable in <code>activemq</code> script itself. <br clear="none"><br clear="none">You could use <code>setup</code> command to create additional system wide defaults file to configure the broker.<br clear="none">(modify the settings in this file if neccessary - the default entries look a bit garbled due to an accidentally applied bugfix in this release)</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: bash; gutter: false; theme: Default" style="font-size:12px;">./activemq setup /etc/default/activemq</pre>
</div></div><p>The configuration of the script can be placed at <code>/etc/default/activemq</code> or <code>$HOME/.activemqrc</code>. Note, this is the configuration for the <em>script</em> not for configuring ActiveMQ.</p><p>To use addtional configurations for running multiple instances on the same operating system rename or symlink script to a name matching to <code>activemq-instance-&lt;INSTANCENAME&gt;</code>. This changes the configuration location to <code>/etc/default/activemq-instance-&lt;INSTANCENAME&gt;</code> and <code>$HOME/.activemqrc-instance-&lt;INSTANCENAME&gt;</code>. Configuration files in /etc have higher precedence.</p><h2 id="UnixShellScript-Runningactivemqasaunixdaemon">Running activemq as a unix daemon</h2><ul><li><p>Install activemq broker as "root" to be run as "activemq"</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">useradd -m activemq -d /srv/activemq
cd /srv/activemq
tar zxvf apache-activemq-&lt;version&gt;-bin.tar.gz$ ln -snf apache-activemq-&lt;version&gt; current
chown -R activemq:users apache-activemq-&lt;version&gt;
</pre>
</div></div></li><li><p>Create a global default configuration and edit the configuration</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">cp apache-activemq-&lt;version&gt;/bin/env /etc/default/activemq
sed -i '~s/^ACTIVEMQ_USER=""/ACTIVEMQ_USER="activemq"/' /etc/default/activemq
vim /etc/default/activemq
chmod 644 /etc/default/activemq</pre>
</div></div><ul><li>Configure the java heap to a size suitable to your system environment and usage</li><li>Consider to move the folders "data", "tmp" and "conf" out of the installation path</li></ul></li><li><p>Install the init script</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">ln -snf /srv/activemq/current/bin/activemq /etc/init.d/activemq</pre>
</div></div></li><li><p>Activate the init script at system startup<br clear="none">(TODO: uncomplete)</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"># RHEL
chkconfig --add activemq
chkconfig activemq on
# Debian/Ubuntu
update-rc.d defaults activemq</pre>
</div></div></li></ul><h2 id="UnixShellScript-Runningmultipleinstances">Running multiple instances</h2><p>To use additional configurations for running multiple instances on the same operating system rename or symlink script to a name matching to <code>activemq-instance-&lt;INSTANCENAME&gt;</code>.<br clear="none">This changes the configuration location to <code>/etc/default/activemq-instance-&lt;INSTANCENAME&gt;</code> and <code>$HOME/.activemqrc-instance-&lt;INSTANCENAME&gt;</code>. Configuration files in /etc have higher precedence.</p><p>Example procedure suitable to the procedure "Running activemq as a unix daemon"</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Example</b></div><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">mkdir /srv/activemq/instance1
cp -av /srv/activemq/current/conf/ /srv/activemq/instance1/
mkdir /srv/activemq/instance1/{data,tmp}
ln -snf /srv/activemq/current/bin/activemq /etc/init.d/activemq-instance-test1
cp /srv/activemq/install/bin/env /etc/default/activemq-instance-instance-test1</pre>
</div></div><p>Modify the configuration variables in /etc/default/activemq-instance-instance-test1</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">ACTIVEMQ_HOME="/srv/activemq/current/"
ACTIVEMQ_CONF="/srv/activemq/instance1/conf"
ACTIVEMQ_DATA="/srv/activemq/instance1/data"
ACTIVEMQ_TMP="/srv/activemq/instance1/tmp"</pre>
</div></div><p>Control the instance</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">/etc/init.d/activemq-instance1 start|stop|restart|console|....</pre>
</div></div><p>&#160;</p><p>Hint: If you are using multiple instances you can only add the main instance to the automatic system start using ("update-rc.d" or "chkconfig") because the LSB Header "Provides" needs to be uniq.</p><h1 id="UnixShellScript-Testingandreportinginteroperabilityproblemsforunixplatforms">Testing and reporting interoperability problems for unix platforms</h1><p>&#160;</p><p>The activemq repo provides a testsuite to validate the proper operation of the unix shell script on different platforms.</p><ul><li><p>Download the testsuite<br clear="none">Alternatively clone the sourcecode repo (<a shape="rect" href="source.html">Source</a>) and pick the file <em>assembly/src/test/scripts/init-script-testsuite</em></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">cd /tmp
wget -c "https://git-wip-us.apache.org/repos/asf?p=activemq.git;a=blob_plain;f=assembly/src/test/scripts/init-script-testsuite;hb=HEAD"</pre>
</div></div></li><li><p>Execute the testsuite</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">cd &lt;Installation Dir of the ActiveMQ Script&gt;
./activemq stop
/tmp/init-script-testsuite 2&gt;&amp;1| tee /tmp/test-suite.log</pre>
</div></div></li><li><p>Detailed debug information can be provided by the following procedure</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">export PS4=' ${BASH_SOURCE}:${LINENO}(${FUNCNAME[0]}) '
bash -x ./activemq &lt;argument&gt; 2&gt;&amp;1 |tee /tmp/detailed-debugging.log</pre>
</div></div></li><li><p>Create a ticket and attach the logfiles to the ticket.</p></li></ul><p>&#160;</p></div>