You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Marc Saegesser <ma...@apropos.com> on 2001/08/31 04:29:49 UTC

RE: PATCH: jk_nt_service can't automatically be restarted by Windows Service Control Manager upon crash

As of Win2000 (not sure if this existed in WinNT) you can configure a
service to attempt to recover if it dies.  This is fairly flexible in that
you can cause it to attempt up to three restarts (after a delay period),
execute a file on failure, reboot the system, etc.

We might as well use the facilities the OS provides instead of duplicating
this inside the service.


Marc Saegesser

> -----Original Message-----
> From: Schreibman, David [mailto:DSchreibman@eTranslate.com]
> Sent: Thursday, August 30, 2001 6:06 PM
> To: 'tomcat-dev@jakarta.apache.org'
> Subject: RE: PATCH: jk_nt_service can't automatically be restarted by
> Windows Service Control Manager upon crash
>
>
> If you really want the service code to be aggressive about restarting
> Tomcat, I would suggest just calling start_tomcat() again.  This
> would avoid
> any dependency on the Service Control Manager's reaction to "ungraceful"
> exits.  In fact, I've never seen any documentation from Microsoft
> about such
> restarts.  The only automatic service startups that I know about are upon
> booting.  Can you send a reference to MS documentation about this?
>
> In addition, I don't think you would want this to just keep restarting
> indefinitely.  If the vm is crashing a lot then there's something going on
> that needs to be looked at.  Such restart functionality should be
> limited to
> a certain number of retries.  Continuing to run the vm might
> interfere with
> other software running on the same machine.  Especially if the vm is
> crashing due to some unusual resource consumption.
>
> Just my 2 bits worth.
>
> -David
>
>
> -----Original Message-----
> From: Dave Ringoen [mailto:dringoen@alventive.com]
> Sent: Thursday, August 30, 2001 2:55 PM
> To: 'tomcat-dev@jakarta.apache.org'
> Cc: Chien-Ming Huang; Brian Enright; Rob Webb; Patti Vrobel; Steven
> Velez
> Subject: PATCH: jk_nt_service can't automatically be restarted by
> Windows Service Control Manager upon crash
>
>
> We're using Tomcat at our company with considerable success, but
> discovered
> that if java.exe crashes for some reason, the Tomcat service won't restart
> automatically.
>
> I diagnosed the problem and came up with this discovery and a
> proposed fix.
>
> jk_nt_service.exe exits too gracefully if the java.exe process dies,
> notifying the Service Control Manager that it is shutting down.
> When Service
> Control Manager receives the shutdown message, it does not restart the
> service. It assumes that the service was supposed to be shut down.
>
> This patch makes jk_nt_service exit more abruptly without notifying SCM.
> With this patch, SCM will correctly initiate a restart of the Tomcat
> service.
>
> I couldn't file this in Bugzilla because Bugzilla was down.
>
> Thanks for your consideration on this patch. I'm very impressed with the
> Tomcat development approach and process.
>
> Dave Ringoen
> Alventive, Inc.
>
>
> cvs diff -u jk_nt_service.c (in directory
> C:\Temp\tomcatsrcnightly\jakarta-tomcat\src\native\mod_jk\nt_service)
> Index: jk_nt_service.c
> ===================================================================
> RCS file:
> /home/cvspublic/jakarta-tomcat/src/native/mod_jk/nt_service/jk_nt_
> service.c,
> v
> retrieving revision 1.3
> diff -u -r1.3 jk_nt_service.c
> --- jk_nt_service.c	2001/04/24 08:49:46	1.3
> +++ jk_nt_service.c	2001/08/30 18:05:02
> @@ -535,6 +535,11 @@
>                          /*
>                           * Tomcat died !!!
>                           */
> +                        CloseHandle(hServerStopEvent);
> +                        CloseHandle(hTomcat);
> +                        exit(0); // exit ungracefully so
> +                                 // Service Control Manager
> +                                 // will attempt a restart.
>                          break;
>                      default:
>                          /*