Good points.

Where would you suggest putting this script?
On the machine itself, or on another machine that has to
get to it through the internet?

I think this is a great idea for many widely deployed application.

Oscar

On Tue, 25 Feb 2003, Turner, John wrote:

> 
> Sorry to be pedantic, but that example doesn't do anything at all.  I think
> first that you would want ContentLength() to be less than or equal to zero,
> and even then it doesn't test the availability of your app, because a 404 or
> 500 Internal Server error will have a content length greater than zero and
> be a valid answer to the request as far as the monitor is concerned.
> 
> If your app uses a database, and you want to monitor that your app is "up",
> you must create a JSP page that queries a database for a known value, and
> either returns that value as the response (preferred) or determines if the
> value is correct and instead returns the value of a constant as the
> response, such as a string like "SUCCESS" or "OK" or "APP UP" or something
> else.  The monitor must then check for that value.
> 
> Anything else is not a test of your web app, and even then it is only a
> partial test, since a true test would be to emulate a user session exactly
> with some sort of robot script.
> 
> If your web app does not use a database or other remote data source, you can
> get away with a servlet or JSP that does something like:
> 
> <html>
> <head>
> <title>APP Monitor</title>
> </head>
> <body>
> <%
> String myMonitor = "SUCCESS";
> out.println(myMonitor);
> %>
> </body>
> </html>
> 
> Then your monitor needs to determine if the contents of the response contain
> "SUCCESS" or not.  If yes, everything is OK.  If not, something is wrong.
> 
> John
> 
> > -----Original Message-----
> > From: Hannes Schmidt [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, February 25, 2003 3:06 PM
> > To: Tomcat Users List
> > Subject: Re: crontab problems
> > 
> > 
> > > Would you expand on option 2.
> > 
> > A Java thread is a sequence of execution of Java bytecode on a JVM.
> > Obviously, there can be multiple threads per JVM. A JVM is a native
> > operating system process interpreting (sometimes compiling on 
> > the fly) the
> > bytecode of at least one Java thread. Since there can be 
> > multiple processes
> > per machine, there can be multiple JVMs per machine. Ideally, 
> > these JVMs are
> > completely separated, at least their address space (memory) 
> > is. Sometimes an
> > operating system provides native threads. These are threads 
> > of execution of
> > machine instructions on the real machine. There can be multiple native
> > threads per native process. Thus, it is possible to map 
> > native threads to
> > Java threads: the JVM process contains multiple real threads, 
> > each executing
> > one thread of bytecode. I don't think the Sun's JVM does 
> > that, but I'm not
> > sure.
> > 
> > You just have to make sure that the monitoring thread is not 
> > executed inside
> > the same JVM that runs the application to be monitored.
> > 
> > > Why is this a thread rather than a java app that is started 
> > on system
> > > startup ?
> > 
> > Option 2 IS a Java application. It consists of a single Java 
> > thread (the one
> > running the main() method). But it is started only once and it repeats
> > internally - note the infinite while() loop. A cronjob is a 
> > Unix process
> > that is repeated externally. I use the term externally, because it is
> > started all over again periodically by an 'higher power', i.e. CRON.
> > Cronjobs don't usually contain infinite loops. Whether to use 
> > internal or
> > external repetition depends on the situation: external 
> > repetetion is more
> > time consuming but it releases all resources, e.g. memory after each
> > iteration. Internal repetition is fast but it blocks 
> > resources forever,
> > basically. So if something needs to be executed once every 
> > minute I would
> > strongly suggest internal repetition. If it needs to run once 
> > a day only, I
> > would suggest external repetition.
> > 
> > import java.net.*;
> > public class Main {
> >     public void main( String[] args ) {
> >         while(true) {
> >             URL url = new URL( "http://localhost:8080/examples"; );
> >             URLConnection con = url.openConnection();
> >             con.setUseCaches( false );
> >             con.connect();
> >             if( con.getContentLength() > 0 ) {
> >                 // restart tomcat
> >             }
> >             // cleanup
> >             Thread.getCurrentThread().sleep( 100 ); // or so, 
> > I'm not sure
> >         }
> >     }
> > }
> > 
> > 
> > ----- Original Message -----
> > From: "Ron Day" <[EMAIL PROTECTED]>
> > To: "Tomcat Users List" <[EMAIL PROTECTED]>
> > Sent: Tuesday, February 25, 2003 8:00 PM
> > Subject: RE: crontab problems
> > 
> > 
> > >
> > >
> > > Ron
> > >
> > > -----Original Message-----
> > > From: Hannes Schmidt [mailto:[EMAIL PROTECTED]
> > > Sent: Tuesday, February 25, 2003 12:50 PM
> > > To: Tomcat Users List
> > > Subject: Re: crontab problems
> > >
> > >
> > > There's not a single JVM per machine. Even if the JVM running Tomcat
> > inside
> > > it is crashed, it's prefectly ok to start another one 
> > testing for the
> > > existence or availability of Tomcat and/or a webapp. That 
> > will work. It's
> > > just that this solution is a little awkward. Let me summarize the
> > > alternatives:
> > >
> > > 1) A cronjob shell script using wget as John suggested.
> > >
> > > 2) A Java Thread running in a different UNIX process, i.e. JVM which
> > > repeatedly tests the webapp's availability like I suggested 
> > in my first
> > > posting. That thread runs in a loop and is NOT started 
> > regularly by cron
> > but
> > > once when the system starts (aka. init script).
> > >
> > > Aside from that, your primary goal should be to get rid of 
> > the crash. Ever
> > > tried downgrading to a 1.3 JDK?
> > >
> > > ----- Original Message -----
> > > From: "Turner, John" <[EMAIL PROTECTED]>
> > > To: "'Tomcat Users List'" <[EMAIL PROTECTED]>
> > > Sent: Tuesday, February 25, 2003 6:16 PM
> > > Subject: RE: crontab problems
> > >
> > >
> > > >
> > > > No, I guess that would work.  It just seems to be 
> > needlessly complicated
> > > and
> > > > resource intensive.  You normally don't consider a 
> > program crashing as
> > > > normal behavior.  The point of a monitoring application 
> > is for it to
> > NEVER
> > > > crash, and continually check some other application.
> > > >
> > > > Think about it....cron launches your program to see if Tomcat is
> > started.
> > > > Well, Tomcat isn't.  That's a given, considering that the JVM just
> > > crashed.
> > > > A circle.  See?  Your application is Tomcat, not the JVM.
> > > >
> > > > My point is that if you can successfully retrieve output 
> > from Tomcat,
> > > > generated by either a servlet or a JSP, all is well.  
> > Tomcat is happy,
> > the
> > > > JVM is happy, all is well.  If you can't, something is 
> > wrong, and you
> > have
> > > > to restart anyway.  Seems simpler to me, but I guess 
> > there will always
> > be
> > > > different ways to do things.
> > > >
> > > > Heck, if this happens alot, you'd probably just be better 
> > off profiling
> > > your
> > > > application, finding out WHY it happens (maybe something could be
> > > rewritten
> > > > or re-architected to avoid triggering those bugs), and 
> > possibly just
> > > > determining that a restart every other day or something 
> > is sufficient.
> > In
> > > > that case, just set up a cron job to run at 4 AM your 
> > time 3 times a
> > week
> > > > that restarts Tomcat, without even bothering to check status.
> > > >
> > > > The typcial goal for a monitoring application is to alert you that
> > > something
> > > > is wrong...not to treat something that goes wrong as a 
> > normal event.
> > > >
> > > > John
> > > >
> > > > > -----Original Message-----
> > > > > From: Ayhan Peker [mailto:[EMAIL PROTECTED]
> > > > > Sent: Tuesday, February 25, 2003 12:06 PM
> > > > > To: Tomcat Users List
> > > > > Subject: RE: crontab problems
> > > > >
> > > > >
> > > > > Am I right to think that if jvm crashes...Once writing to
> > > > > core file is
> > > > > finished, jvm can be restarted..(that is what we have 
> > been doing--jvm
> > > > > crashes, of course tomcat too)
> > > > > AND crontab say 5 min later..launches this java 
> > programme, which will
> > > > > restart tomcat..this is not a thread..just a java
> > > > > programme...that is the
> > > > > reason I am trying to launch it from crontab...
> > > > >
> > > > > When jvm crashes it writes its report..and goes away from the
> > > > > memory..You
> > > > > can still launch a java programme after this crash (like
> > > > > launching tomcat
> > > > > again after the crash)..
> > > > >
> > > > > ..
> > > > >
> > > > > --tomcat running
> > > > > --jvm crashes..
> > > > > --crontab launches my watcher (written in java)
> > > > > --my application checks if tomcat is running...and restarts
> > > > > is necessary..
> > > > > --if my programme is running at the time of crash..my
> > > > > programme crashes
> > > > > too...but 5 min later my programme is activated by 
> > crontab again..
> > > > >
> > > > >
> > > > > Am I missing something here?
> > > > >
> > > > > Take care..
> > > > >
> > > > > Ayhan
> > > > >
> > > > >
> > > > >
> > > > > At 10:12 AM 2/25/03 -0500, you wrote:
> > > > >
> > > > > >Well, if the JVM is "crashed", how can a program or
> > > > > application written in
> > > > > >Java help you manage Tomcat?  That was the point.
> > > > > >
> > > > > >John
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Ayhan Peker [mailto:[EMAIL PROTECTED]
> > > > > > > Sent: Tuesday, February 25, 2003 9:43 AM
> > > > > > > To: Tomcat Users List
> > > > > > > Subject: RE: crontab problems
> > > > > > >
> > > > > > >
> > > > > > > I have no problems with tomcat...
> > > > > > >
> > > > > > > But sometimes under heavy load jvm 1.4 crashes...
> > > > > > > see the links:
> > > > > > >
> > > > > > > Ok this is the bug:
> > > > > > >
> > > > > 
> > http://developer.java.sun.com/developer/bugParade/bugs/4779653.html
> > > > > > > unfortunately it is closed, affects 1.4.1 and will not
> > > > > > > apparently be fixed.
> > > > > > > It oiccurs in large apps under load.on Linux and Solaris (
> > > > > > > and most likely
> > > > > > > Windows )
> > > > > > > It is related to / a copy of the following bug which
> > > > > > >
> > > > > 
> > http://developer.java.sun.com/developer/bugParade/bugs/4724356.html
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > what is the best suggestion?
> > > > > > >
> > > > > > > just trying to determine if tomcat is running..
> > > > > > > if not i will restart it ..
> > > > > > > (jvm just crashed last saturday night....I did not know
> > > > > > > anything until the
> > > > > > > sunday evening)..
> > > > > > >
> > > > > > >
> > > > > > > At 09:29 AM 2/25/03 -0500, you wrote:
> > > > > > >
> > > > > > > >Yes, Tomcat is generally very stable.  But: Trust, 
> > but verify. ;)
> > > > > > > >
> > > > > > > >John
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Hannes Schmidt 
> > [mailto:[EMAIL PROTECTED]
> > > > > > > > > Sent: Tuesday, February 25, 2003 9:23 AM
> > > > > > > > > To: Tomcat Users List
> > > > > > > > > Subject: Re: crontab problems
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Yes, using wget is probably the second best 
> > solution. The
> > > > > > > > > best one is to
> > > > > > > > > find the reason why Tomcat crashes at all, 
> > since it generally
> > > > > > > > > is a stable
> > > > > > > > > and reliable product.
> > > > > > > > >
> > > > > > > > > Cron doesn't execute more than once a minute 
> > (at least mine
> > > > > > > > > doesn't) which
> > > > > > > > > still is quite often. 5 or 10 minutes would be 
> > ok too. But
> > > > > > > > > that's a matter
> > > > > > > > > of taste, really.
> > > > > > > > >
> > > > > > > > > ----- Original Message -----
> > > > > > > > > From: "Turner, John" <[EMAIL PROTECTED]>
> > > > > > > > > To: "'Tomcat Users List'" 
> > <[EMAIL PROTECTED]>
> > > > > > > > > Sent: Tuesday, February 25, 2003 3:00 PM
> > > > > > > > > Subject: RE: crontab problems
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Agreed...using a Java program to watch Tomcat seems a
> > > > > > > > > little circular.
> > > > > > > > > > Plus, I don't see any sort of delay or "sleep" in the
> > > > > > > poster's JAva
> > > > > > > > > > code...it looks like it just keeps hammering 
> > at Tomcat, as
> > > > > > > > > the cron job is
> > > > > > > > > > "* * * * *".  Creating all those Runtime 
> > objects over and
> > > > > > > > > over can't be
> > > > > > > > > > helping performance any.
> > > > > > > > > >
> > > > > > > > > > A simple shell script using wget would be 
> > fine...sure, you
> > > > > > > > > can watch the
> > > > > > > > > > output of "ps -ef", but that doesn't tell you 
> > if Tomcat
> > > > > > > is accepting
> > > > > > > > > > requests or not.  There could be an entry for 
> > Tomcat in the
> > > > > > > > > process table,
> > > > > > > > > > but Tomcat could be refusing requests.
> > > > > > > > > >
> > > > > > > > > > I just write a simple JSP page that outputs 
> > the contents of
> > > > > > > > > a variable,
> > > > > > > > > like
> > > > > > > > > > "***SUCCESS***" or something like that, then 
> > use wget to
> > > > > > > > > grab that page
> > > > > > > > > > every so often and check for the string in 
> > the output...if
> > > > > > > > > it's there,
> > > > > > > > > > things should be OK (there are no 
> > guarantees).  If it's
> > > > > > > > > not, you have a
> > > > > > > > > > problem.  This way, the JSP page is compiled 
> > and cached by
> > > > > > > > > Tomcat, it uses
> > > > > > > > > > very little memory, and doesn't bog down the server.
> > > > > > > > > >
> > > > > > > > > > There are plenty of other alternatives much 
> > more robust
> > > > > > > > > than a simple
> > > > > > > > > shell
> > > > > > > > > > script...you could use Netsaint/Nagios, Big 
> > Brother, and a
> > > > > > > > > whole bunch of
> > > > > > > > > > others.
> > > > > > > > > >
> > > > > > > > > > John
> > > > > > > > > >
> > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > From: Hannes Schmidt
> > > > > [mailto:[EMAIL PROTECTED]
> > > > > > > > > > > Sent: Tuesday, February 25, 2003 6:29 AM
> > > > > > > > > > > To: Tomcat Users List
> > > > > > > > > > > Subject: Re: crontab problems
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Right, you might also just put
> > > > > > > > > > >
> > > > > > > > > > > JAVA_HOME=...
> > > > > > > > > > >
> > > > > > > > > > > at the beginning of your crontab.
> > > > > > > > > > >
> > > > > > > > > > > I assume you have good reasons to use a 
> > Java program to
> > > > > > > > > watch Tomcat.
> > > > > > > > > > > Personally, I would have written a shell 
> > script. If you
> > > > > > > > > > > really want to use
> > > > > > > > > > > Java, you might want to use a different, 
> > more reliable
> > > > > > > > > > > approach to detect
> > > > > > > > > > > (un)availability of Tomcat, something like
> > > > > > > > > > >
> > > > > > > > > > > import java.net.*;
> > > > > > > > > > > URL url = new URL( 
> > "http://localhost:8080/examples"; );
> > > > > > > > > > > URLConnection con = url.openConnection();
> > > > > > > > > > > con.setUseCaches( false );
> > > > > > > > > > > con.connect();
> > > > > > > > > > > if( con.getContentLength() > 0 ) {
> > > > > > > > > > >     // restart tomcat
> > > > > > > > > > > }
> > > > > > > > > > >
> > > > > > > > > > > But I just wrote this out of my head ...
> > > > > > > > > > >
> > > > > > > > > > > ----- Original Message -----
> > > > > > > > > > > From: "Ralph Einfeldt" 
> > <[EMAIL PROTECTED]>
> > > > > > > > > > > To: "Tomcat Users List" 
> > <[EMAIL PROTECTED]>
> > > > > > > > > > > Sent: Tuesday, February 25, 2003 10:43 AM
> > > > > > > > > > > Subject: RE: crontab problems
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > You have to make shure that your script 
> > retstart_tomcat
> > > > > > > > > > > sets and exports all needed environment 
> > variables before
> > > > > > > > > > > calling ./startup.sh:
> > > > > > > > > > >
> > > > > > > > > > > JAVA_HOME=/usr/local/java/jdk1.3.1
> > > > > > > > > > > CATALINA_HOME=<path to tomcat installation>
> > > > > > > > > > > CATALINA_BASE=<path to tomcat instance> or 
> > $CATALINA_HOME
> > > > > > > > > > > # JAVA_OPTS='-client -v'
> > > > > > > > > > >
> > > > > > > > > > > export JAVA_HOME CATALINA_HOME 
> > CATALINA_BASE JAVA_OPTS
> > > > > > > > > > > ./startup.sh
> > > > > > > > > > >
> > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > From: Ayhan Peker [mailto:[EMAIL PROTECTED]
> > > > > > > > > > > > Sent: Tuesday, February 25, 2003 10:30 AM
> > > > > > > > > > > > To: [EMAIL PROTECTED]
> > > > > > > > > > > > Subject: crontab problems
> > > > > > > > > > > >
> > > > > > > > > > > > but the last two lines returns
> > > > > > > > > > > > /////////////////////////
> > > > > > > > > > > > The JAVA_HOME environment variable is not defined
> > > > > > > > > > > > message..
> > > > > > > > > > > > /////////////////////////
> > > > > > > > > > > > my retstart_tomcat scrip is
> > > > > > > > > > > > #!/bin/sh
> > > > > > > > > > > > cd /usr/local/tomcat/bin
> > > > > > > > > > > > ./startup.sh
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > 
> > ---------------------------------------------------------------------
> > > > > > > > > > > To unsubscribe, e-mail:
> > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > > For additional commands, e-mail:
> > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > 
> > ---------------------------------------------------------------------
> > > > > > > > > > > To unsubscribe, e-mail:
> > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > > For additional commands, e-mail:
> > > > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > 
> > ---------------------------------------------------------------------
> > > > > > > > > > To unsubscribe, e-mail:
> > > > > > > [EMAIL PROTECTED]
> > > > > > > > > > For additional commands, e-mail:
> > > > > > > [EMAIL PROTECTED]
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > > 
> > ---------------------------------------------------------------------
> > > > > > > > > To unsubscribe, e-mail:
> > > > > [EMAIL PROTECTED]
> > > > > > > > > For additional commands, e-mail:
> > > > > > > [EMAIL PROTECTED]
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > 
> > >---------------------------------------------------------------------
> > > > > > > >To unsubscribe, e-mail:
> > > > > [EMAIL PROTECTED]
> > > > > > > >For additional commands, e-mail:
> > > > > [EMAIL PROTECTED]
> > > > > > >
> > > > > > >
> > > > > >
> > > > > 
> > >---------------------------------------------------------------------
> > > > > >To unsubscribe, e-mail: 
> > [EMAIL PROTECTED]
> > > > > >For additional commands, e-mail: 
> > [EMAIL PROTECTED]
> > > > >
> > > > >
> > > >
> > > > 
> > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: 
> > [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> > > 
> > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > > 
> > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to