How to automatically recover Tomcat from crashes

rajeshkumar created the topic: How to automatically recover Tomcat from crashes

How to automatically recover Tomcat from crashes

Tomcat occasionally crashes if you do frequent hot-deploys or if you are running it on a machine with low memory. Every time tomcat crashes someone has to manually restart it, so I wrote a script which automatically detects that tomcat has crashed and restarts it.

Here’s the pseudo logic:

1. every few minutes {  
   2.   check tomcat status;  
   3.   
   4.   if (status is "not running") {  
   5.     start tomcat;  
   6.   }  
   7. }

Here’s a shell script to implement the above logic. It assumes that you are running on a unix/linux system and have /etc/init.d/tomcat* script setup to manage tomcat.

Adjust the path to “/etc/init.d/tomcat” in the script below to reflect the correct path on your computer. Sometimes it is called /etc/init.d/tomcat5 or /etc/init.d/tomcat6 depending on your tomcat version. Also make sure that the message “Tomcat Servlet Container is not running.” matches with the message that you get when you run the script when tomcat is stopped.

# #! /bin/sh  
# SERVICE=/etc/init.d/tomcat  
# STOPPED_MESSAGE="Tomcat Servlet Container is not running."  
#   
# if [ "`$SERVICE status`" == "$STOPPED_MESSAGE"];  
# then  
# {  
#   $SERVICE start  
# }  
# fi

To run the script every 10 minutes:

1. Save the above script to “/root/bin/recover-tomcat.sh”.

2. Add execute permission:

1. chmod +x /root/bin/recover-tomcat.sh

chmod +x /root/bin/recover-tomcat.sh

3. Add this to root’s crontab, type the following as root:

1. crontab -e

crontab -e

4. Add the following lines to the crontab:

1. # monitor tomcat every 10 minutes
2. */10 * * * * /root/bin/recover-tomcat.sh

What if I don’t have /etc/init.d/tomcat* script on my computer?

Tomcat creates a pid file, typically in the TOMCAT_HOME/bin directory. This file contains the process id of the tomcat process running on the machine. The pseudo logic in that case would be:

1. if (the PID file does not exist) {  
   2.   // conclude that tomcat is not running  
   3.   start tomcat  
   4. }  
   5. else {  
   6.   read the process id from the PID file  
   7.   if (no process that id is running) {  
   8.     // conclude that tomcat has crashed  
   9.     start tomcat  
  10.   }  
  11. }

You can implement the above logic as follows. The following is experimental and is merely a suggested way, test it on your computer before using it.

   1. # adjust this to reflect tomcat home on your computer  
   2. TOMCAT_HOME=/opt/tomcat5  
   3.   
   4. if [ -f $TOMCAT_HOME/bin/tomcat.pid ]  
   5. then  
   6.   echo "PID file exists"  
   7.   pid="`cat $TOMCAT_HOME/bin/tomcat.pid`"  
   8.   if [ "X`ps -p $pid | awk '{print $1}' | tail -1`" = "X"]  
   9.   then  
  10.     echo "Tomcat is running"  
  11.   else  
  12.     echo "Tomcat had crashed"  
  13.     $TOMCAT_HOME/bin/startup.sh  
  14.   fi  
  15. else  
  16.   echo "PID file does not exist. Restarting..."  
  17.   $TOMCAT_HOME/bin/startup.sh  
  18. fi

Why would tomcat crash?

The most common reason is low memory. For example, if you have allocated 1024MB of max memory to tomcat and enough memory is not available on that machine. Other reasons may involve repeated hot-deploys causing memory leaks, rare JVM bugs causing the JVM to crash.

Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

Setup SSL with Apache2

rajeshkumar created the topic: Setup SSL with Apache2

Hi,

I am trying to setting up a SSL with apache2 so application can be run on https instead of http. Any body has got any live experience with step by step instructions?

help me out?

Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

mod_jk module Vs mod_rewrite and mod_proxy

rajeshkumar created the topic: mod_jk module Vs mod_rewrite and mod_proxy

Hi,

In order to Integrate Jboss with Apache, i got to 2 solutions below;
1. Integration using mod_jk module &
2. Integration using mod_rewrite and mod_proxy

I have few questions top of it

1. Which is better solutions and what are the pros and cons of this?
2. Is there any other solution for Apache2 and jboss integration?

Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

Integration of Jboss and Apache2

rajeshkumar created the topic: Integration of Jboss and Apache2

Hi,

My Application(.ear) is running in Jboss with any issues on 7001 port. There are following requirement as such with me. Task 1. Integrate Jboss with Apache2 so all the request should be coming from Apache Instead of jboss

Task 2. Implement SSLwith apache2 so it should open with https instead of http.

For task 1, I have followed carefully community.jboss.org/wiki/UsingModjk12WithJBoss with some issues. 1. Application is getting up and running without any issues but logout has some issues. 2. I want to stop JBOSS access point but not getting any clue

For task 2 Once this is up and running, i will have to implement SSL with Apache so it should only get open with HTTPS instead of http. any help on this front as well..any links or Reference.

Reagrds, Raj, Build and Release Engineer, scmGalaxy.com

Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

rajeshkumar replied the topic: Re:Integration of Jboss and Apache2

Jboss along with Apache 2 setup is working fine but I am getting issues with SSL setup with apache..

I followed the tomcat.apache.org/tomcat-3.3-doc/tomcat-ssl-howto.html
but without success?

Any urgent help?
Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

rajeshkumar replied the topic: Re:Integration of Jboss and Apache2

Hi,

With continuation of post, www.scmgalaxy.com/forum/55-jboss/317-int…oss-and-apache2.html

Integration of Jboss with Apache2 which i achieved Successful but got stuck in SSL Setup with Apache2. One point need to be note down is that I am using module_jk.

Any help on this. I could get first page with https URL but once login, its redirecting to http URL.

Any Solution?

my httpd.conf file


My mod-jk.conf file
# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
 
# Where to find workers.properties
JkWorkersFile conf/workers.properties
 
# Where to put jk logs
JkLogFile logs/mod_jk.log
 
# Set the jk log level [debug/error/info]
JkLogLevel info
 
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
 
# JkOptions indicates to send SSK KEY SIZE
# Notes: 
# 1) Changed from +ForwardURICompat. 
# 2) For mod_rewrite compatibility, use +ForwardURIProxy (default since 1.2.24)
# See http://tomcat.apache.org/security-jk.html  
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
 
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
 
# Mount your applications
JkMount /__application__/* loadbalancer
# Let Apache serve the images
JkUnMount /__application__/images/* loadbalancer
 
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
 
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
## Note: Replaced JkShmFile logs/jk.shm due to SELinux issues. Refer to 
# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225452
JkShmFile run/jk.shm
 
# Add jkstatus for managing runtime data
<Location /jkstatus>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
 
# Added by Rajesh
#=================================================
<VirtualHost 10.4.51.29:80>
	ServerName 10.4.51.29
	JkMount /elance loadbalancer
	JkMount /elance/* loadbalancer
 
 
 
 
</VirtualHost> 

My httpd-ssl.conf file


Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged : /

Bugzilla 2.22.1

rajeshkumar.aap@gmail.com created the topic: Bugzilla 2.22.1

QI want to add new field in bugzilla when we create a ticket. can u tell me how can i do that?

QI want to change the email format of bugzilla. how that will be done?

mnanjala replied the topic: Re: Bugzilla 2.22.1

I think you need to modify Mailer.pm. At the very least, you need to specify
a content-type: header of “text/html”. And to really do the job right, you
might also appropriately encode characters as HTML entities. You might want
to do the latter piece-wise in BugMail.pm and please take a look at how whine.pl does it..

Tagged :

Start Apache with normal user

scmuser created the topic: Start Apache with normal user

Hi,

I have few normal user in linux to whom I want to give apache http start and stop access? any idea how to to do this?

When i start start apache httpd, then i get some error somthing like permission denied ..

./apachectl start
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down
Unable to open logs

Any Solution….

Tagged :

Enable/Disable Hot Deployment in Jboss EAP 5.1

tpatil created the topic: Enable/Disable Hot Deployment in Jboss EAP 5.1

Hot Deployment in Jboss EAP 5.1 can be controlled by 2 ways:-

1. ${config}/deploy/hdscanner-jboss-beans.xml deployment descriptor will enable deployment scanning by default; removing it will disable it.

2. The scanEnabled attribute can be added to deploy/hdscanner-jboss-beans.xml. Setting this attribute to false will disable scanning, and setting this attribute to true will enable it.

Tagged :

Starting multiple instances of jboss from shell script

tpatil created the topic: Starting multiple instances of jboss from shell script

For starting the multiple instances of jboss I have created the following 2 scripts.

Please let me know if anybody has any other suggestions.

JBstartall.sh will call JBstart.sh

{code}
##############
#JBstartall.sh
##############
#!/bin/sh

cluster="node1:192.168.32.45,node2:192.168.32.46"

for clust in ${cluster//,/ };
do
HOST=`echo $clust |cut -f2 -d:`
NODE=`echo $clust |cut -f1 -d:`
echo "Starting jboss $NODE on $HOST ....."
./JBstart.sh $NODE $HOST
done

date
echo "JBstartall.sh complete"
exit 0

#####
# EOS
#####
{code}

and

{code}
#!/bin/sh
### ====================================================================== ###
## ##
## JBoss Startup Script ##
## ARG1 =====>Name of profile ##
## ARG2 =====>Hostname/IP address of node ##
### ====================================================================== ###

JBOSSDIR=/local/sys/jboss-eap-5.1/jboss-as
TARGETDIR=$JBOSSDIR/server/$1
BINDHOST=$2
JMXUSER=admin
JMXPASS=admin

echo "Starting jboss..........."

rm /tmp/jboss.$1.start > /dev/null

$JBOSSDIR/bin/run.sh -c $1 -b $BINDHOST > /tmp/jboss.$1.start 2>&1 &
pid=$!

started=false

for i in `seq 1 30` ; do
if ps -p $pid > /dev/null ; then : ; else
break
fi
sleep 2
result="`$JBOSSDIR/bin/twiddle.sh -s $BINDHOST -u $JMXUSER -p $JMXPASS get "jboss.system:type=Server" Started --noprefix`"
if [ $? == 0 -a x"$result" == x"true" ] ; then
started=true
break
fi
done

if $started ; then
echo $pid >> $TARGETDIR/log/jboss.pid
echo ".........Sucessfully Started"
exit 0
elif test i = 30 ; then
echo "...............Timed Out"
exit 1
else
echo "...............Failed to Start"
exit 1
fi

date
echo "JBstart.sh complete"
exit 0

#####
# EOS
#####
{code}
Tagged :

Jboss boot over the network error

rajeshkumar created the topic: jboss boot over the network error
Hi,

I am getting following error when i start jboss over the network..

./run -n http://XX.XX.XX.XX:8080/netboot

Error Log.


Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :