[
https://issues.apache.org/jira/browse/AMQ-8471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17606012#comment-17606012
]
Consultant Leon edited comment on AMQ-8471 at 9/17/22 12:22 AM:
----------------------------------------------------------------
I run into the same problem, just today upgrading from activemq 5.16.0 ->
5.16.5 on good old solaris 10 ...
Firstly I couldn't start activemq:
* first line reads #!/bin/sh which on solaris means the script is executed as
bourne shell , not bash.
* then I got error /WEB-INF/webconsole-embedded.xml FileNotFound -> it's
caused by $ACTIVEMQ_HOME pointing to a symlink rather than the physical
directory (this worked fine before, I think there's another issue open, btw
this is also an issue on windows and any linux I've tried it on)
* and now I found this issue trying to stop failing...
uname -a :
SunOS server1 5.10 Generic_150401-11 i86pc i386 i86pc
Don't really understand who still uses ` backticks? $( ... ) seems much more
robust and elegant?
Why log that the pid file is outdated while the process id is still running -
this can be made much more robust in my view.
The following seems more robust and will probably work cross platform:
$ if [ "$(ps -p 13143 -o fname=)" = "java" ]; then echo kill the process; else
echo its not java; fi
kill the process
$ ps -p 13143 -o fname=
java
(the '=' after fname suppresses the headers
[https://unix.stackexchange.com/questions/232708/disabling-column-names-in-ps-output]
)
the option -e seems unnecessary as well, why grep all processes and not just
the user's processes.
local pidfile="${1}"
if [ -f $pidfile ]; then
I'd use quotes around $pidfile in case there's spaces in the path (the old
checkRunning() code did that correctly.
Why not write a new method to check for the wrapper script (pidfile.stop) and
leave the original tested and proven method as is rather than combining the 2
needs and breaking good old proven methods?
Some further testing and I found that ps -eo "pid,args" | grep java returns:
orchestrate@kzone151> ~/3rdparty/apache-activemq-5.16.5 $ ps -eo "pid,args" |
grep "java"
13143 /kenvng/java/jdk1.8.0_333/bin/java
-Djava.util.logging.config.file=logging.prop
11457 /usr/java/bin/java -server -Xmx128m -XX:+UseParallelGC
-XX:ParallelGCThreads=4
And as you see args gives the full absolute path to the java binary on solaris,
so grep'ing for a \sjava pattern fails (as there's no white space before 'java'
in this case).
When I use ps -o "pid,fname" things work fine:
$ RET="`ps -eo "pid,fname" | grep "^\s*13143\s*java"`"
$ if [ -n "$RET" ]; then echo yes; else echo no; fi
yes
As said before -e can be dropped, instead of checking if there is some output
of the grep you could check its return status to be successful (and suppress
any stdout or stderr):
$ if ps -o "pid,fname" | grep "^\s*13143\s*java" > /dev/null 2>&1; then echo
yes; else echo no; fi
yes
was (Author: consultantleon):
I run into the same problem, just today upgrading from activemq 5.16.0 ->
5.16.5 on good old solaris 10 ...
Firstly I couldn't start activemq:
* first line reads #!/bin/sh which on solaris means the script is executed as
bourne shell , not bash.
* then I got error /WEB-INF/webconsole-embedded.xml FileNotFound -> it's
caused by $ACTIVEMQ_HOME pointing to a symlink rather than the physical
directory (this worked fine before, I think there's another issue open, btw
this is also an issue on windows and any linux I've tried it on)
* and now I found this issue trying to stop failing...
uname -a :
SunOS server1 5.10 Generic_150401-11 i86pc i386 i86pc
Don't really understand who still uses ` backticks? $( ... ) seems much more
robust and elegant?
Why log that the pid file is outdated while the process id is still running -
this can be made much more robust in my view.
The following seems more robust and will probably work cross platform:
$ if [ "$(ps -p 13143 -o fname=)" = "java" ]; then echo kill the process; else
echo its not java; fi
kill the process
$ ps -p 13143 -o fname=
java
(the '=' after fname suppresses the headers
[https://unix.stackexchange.com/questions/232708/disabling-column-names-in-ps-output]
)
the option -e seems unnecessary as well, why grep all processes and not just
the user's processes.
local pidfile="${1}"
if [ -f $pidfile ]; then
I'd use quotes around $pidfile in case there's spaces in the path (the old
checkRunning() code did that correctly.
Why not write a new method to check for the wrapper script (pidfile.stop) and
leave the original tested and proven method as is rather than combining the 2
needs and breaking good old proven methods?
> activemq stop command fails with no or outdated process id
> ----------------------------------------------------------
>
> Key: AMQ-8471
> URL: https://issues.apache.org/jira/browse/AMQ-8471
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.16.2
> Reporter: shrihari
> Assignee: Jean-Baptiste Onofré
> Priority: Major
> Attachments: image-2022-02-07-10-21-19-913.png,
> image-2022-02-07-10-21-39-782.png
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> In some AIX/Linux environments, the activemq stop command fails with the
> below error.
> bash-4.4# ./activemq stop
> INFO: Loading '/AMQ/message-broker/bin/env'
> INFO: Using java '/usr/java8_64/bin/java'
> ERROR: No or outdated process id in '/AMQ/message-broker//data/activemq.pid'
> INFO: Removing /AMQ/message-broker//data/activemq.pid
>
> The fix provided in https://issues.apache.org/jira/browse/AMQ-8425 doesn't
> work in such environments as the issue is not due to the user/terminal
> instance.
>
> Workaround:
> Some AIX/linux environments are highly sensitive to the *acute/backquot*
> *character `*
> Backquot character reference :
> [https://www.computerhope.com/jargon/b/backquot.htm]
> Update the file <AMQ_HOME>/message-broker/bin/activemq as below :
> Change the line by removing backquot character :
> RET="`ps -eo "pid,args" | grep "\s*$activemq_pid\s.java"`" to RET="ps -eo
> "pid,args" | grep "\s$activemq_pid\s.*java""
> This will be inside checkRunning() function.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)