如果我在启动Tomcat服务器后立即停止它,则会出现以下错误:
Aug 08, 2016 11:54:26 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Could not contact localhost:8080. Tomcat may not be running.
Aug 08, 2016 11:54:26 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:450)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:400)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:487)
The stop command failed. Attempting to signal the process to stop through OS signal.
Tomcat stopped.
通常,当启动tomcat时,最后一条消息类似于“XXX ms中的服务器启动”。关闭侦听器在启动Tomcat结束时启动。
如何在tomcat启动时启动“Shutdown Listener”。
答案 0 :(得分:1)
你不想这样做(*)。为了清楚地要求Tomcat停止,停止脚本尝试向它发送特殊请求。 Tomcat开发人员发现,如果Tomcat无法回答请求,可能会出现问题,因为任何原因:没有仍然活动,部分或完全崩溃等等。为了解决这个问题,他们只是记录Tomcat没有正常说明并继续一个OS信号强制阻止它。顺便说一句,如果脚本能够阻止脚本,那么脚本会在真实端打印Tomcat stopped
。
即使您可以构建一个特殊版本的Tomcat,它会尝试尽快处理请求,但仍然会有一个竞争条件的时刻,而不是可能的崩溃。
如果您只是不希望显示错误消息,只需使用包含输出和错误输出的瘦包装器包装真实脚本,选择性地记录所有内容以便在出现真正问题的情况下进行进一步研究,并且只搜索对于字符串Tomcat stopped
。如果发现丢弃其他所有内容,只显示一下,如果在脚本结束后没有找到错误信号并提供完整输出以供参考。
(*)无论如何,我无法想象一个可靠的系统......