When creating a simple bash script (actually, scripts for installing Connections using Puppet https://puppet.com/, but that’s a different story), that would need to check if the Deployment Manager is running, I ran into the following problem.
The serverStatus.sh script always returns “0” as status code, even if the server is stopped. So it’s a bit useless in bash scripting, where normally I’d rely on the return code by a script to determine if it ran successfully. So
$? equals 0 when the script ran successfully and not equal “0” when something went wrong.
But like I said already , serverStatus.sh ALWAYS returns “0”.
There’s more problems with the serverStatus.sh command, for one, it takes a (relatively ) long time to execute.
/opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/serverStatus.sh echo $? 0
Anyway, another way to check if the dmgr is running , is by using “grep” . Note that there’s differences in the options on the different flavors of Unix and Linux, but that is not the scope of this post.
I’m also not discussing the best practices, that you should look for process id’s , and not rely on text …
What is important, is that you use the “wide” option (so you see the full java command that is used to start the jvm).
On SLES :
ps -ef | grep dmgr
On Red hat :
ps -wwwef | grep dmgr
Now there’s an annoying problem : this will return (if dmgr is running) 2 processes , the process of the dmgr, but also the grep command itself.
There’s a trick for that - I found it here : http://www.ibm.com/developerworks/library/l-keyc3/#code10
Basically, to get around that, make the grep expression a regex. This will avoid that the grep command itself shows up :
ps -ef | grep "[d]mgr"
This will only show the process we’re interested in.
So now we have a nice , correct variable we can use to determine the Dmgr (or any other WebSphere server, for that matter) is running.
If the Dmgr is running,
ps -ef | grep "[d]mgr" echo $? 0
and if it’s not running :
ps -ef | grep "[d]mgr" echo $? 1