I have code very similar to this that does work............... except whenever I get an unknowHostException, it seems to be cached somewhere until I bounce Tomcat. My code actually pulses another website (in a thread every 3 minutes)that is on the network, rather than check Tomcat. In place of your streams, I actually set the request method to "HEAD", and interrogate the Response Code. This is easy to do in HTTPURLConnection.
I instantiate the URL outside the loop (and hence only once), and I am wondering if this is the source of my problem. I plan to test it ASAP. ron -----Original Message----- From: Hannes Schmidt [mailto:[EMAIL PROTECTED] Sent: Tuesday, February 25, 2003 6:27 PM To: Tomcat Users List Subject: Re: crontab problems Probably not. But the connection does have to be inside the loop. Keep in mind that this is a concept. I have never compiled or tested that code ... ----- Original Message ----- From: "Ron Day" <[EMAIL PROTECTED]> To: "Tomcat Users List" <[EMAIL PROTECTED]> Sent: Tuesday, February 25, 2003 11:09 PMnstantiate the URL outside my loop Subject: RE: crontab problems > Does the URL instantiation have to be inside the while loop ?? > > -----Original Message----- > From: Hannes Schmidt [mailto:[EMAIL PROTECTED] > Sent: Tuesday, February 25, 2003 3:56 PM > To: Tomcat Users List > Subject: Re: crontab problems > > > Right. My sample code wasn't meant to be 100% correct. I wanted to show the > big picture. Yes, it should be > > (! con.getContentLength() > 0) > > an yes even that wouldn't work as John explained. So this is my second > guess: > > import java.net.*; > import java.io.*; > public class Main { > public void main( String[] args ) { > while(true) { > URL url = new URL( "http://localhost:8080/mywebapp/ping.jsp" ); > URLConnection con = url.openConnection(); > con.setUseCaches( false ); > con.connect(); > try { > InputStream is = con.getInputStream(); > InputStreamReader isr = new InputStreamReader( is ); > BufferedReader br = new BuffererdReader( isr ); > String line; > boolean success = false; > while( null != ( line = br.readLine() ) { > if( -1 != line.indexOf( "!!!SUCCESS!!!" ) { > success = true; > } > } > // ... close streams etc. > if( ! success ) { > // restart tomcat > } > } catch( Exception e ) { > // handle exceptions > } > // ... cleanup > Thread.currentThread().sleep( 60 * 1000 ); > } > } > } > > > ----- Original Message ----- > From: "Turner, John" <[EMAIL PROTECTED]> > To: "'Tomcat Users List'" <[EMAIL PROTECTED]> > Sent: Tuesday, February 25, 2003 9:53 PM > Subject: RE: crontab problems > > > > > > Still won't work. A 404, 500, or other error will have a content length > > greater than 0. That's bad. > > > > John > > > > > -----Original Message----- > > > From: Ron Day [mailto:[EMAIL PROTECTED] > > > Sent: Tuesday, February 25, 2003 3:43 PM > > > To: Tomcat Users List > > > Subject: RE: crontab problems > > > > > > > > > Thanks , two questions....... > > > > > > 1) Does the URL creation have to be inside the while loop ? > > > 2) Shouldn't the if statement test be: > > > > > > (! con.getContentLength() > 0) > > > > > > rather than > > > > > > (con.getContentLength() > 0) > > > > > > Ron > > > > > > -----Original Message----- > > > From: Hannes Schmidt [mailto:[EMAIL PROTECTED] > > > Sent: Tuesday, February 25, 2003 2: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] > > > > > > > --------------------------------------------------------------------- > 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]