如何强制tomcat在Windows上的x秒后closures?

在linux系统上,catalina.sh中的stop命令接受超时参数,超时参数在提供的秒数之后强制杀死tomcat。 然而,catalina.bat似乎没有这样的参数。 我们遇到的问题是,我们的tomcat(作为Windows服务运行)拒绝closures当一个net stop tomcat发出。 什么是最好的方式来实现这个行为在Windows框? 我已经看过有关使用taskkill ,但是我怎样才能最好地发现它的进程仍在我的脚本(powershell)中运行。

这个例子假设服务名和进程名都是'tomcat'。

 # Ask service, nicely, to stop Stop-Service -Name 'tomcat' # Give service a bit to tidy up. Start-Sleep -Seconds 30 # If the service isn't stopped yet, end the process forcefully. if ( (Get-Service -Name 'tomcat').Status -ne 'Stopped' ) { Stop-Process -ProcessName 'tomcat' -Force } 

作为Windows服务运行的Tomcat由Windows服务pipe理器控制。

当你做一个净停止,我想停止命令发送到tomcat,但它只是需要更多的时间来完全停止。 例如,如果你做一个净停止并等待足够长的时间,tomcat最终会closures。 (FWIW,我自己在Windows服务器上pipe理一个tomcat,所以这个不是组成的,而是基于几年的实际经验。)

你可以使用taskkill,这会马上终止。 您可以使用进程名称。 如果代码仍然运行在tomcat(写入一个数据库或类似的),这可能是凌乱的。

最好的办法通常是做networking停止并等待它真正退出,或者要求应用程序开发人员正常closures工作(例如,为了让应用程序更快地响应停止请求,tomcat会立即closures)。

如果不这样做的话,如果你不担心终止的效果会怎么样,那么任务就好了。