2016-08-08 71 views
0

Wenn ich Tomcat stoppen Server, sobald es gestartet zu starten, es geht um einen Fehler gibt:wie Tomcat Shutdown-Zuhörer am Anfang

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. 

Normalerweise, wenn tomcat gestartet wird, ist die allerletzte Nachricht etwas wie "Server Start in XXX ms". Der Shutdown-Listener wird am Ende des Starts von Tomcat gestartet.

Wie kann ich "Shutdown Listener" am Anfang starten, wenn Tomcat startet.

+0

Eine Abschaltung ist eine Abschaltung zur Anzeige, keinen Start. Warum willst du das ? – davidxxx

+0

Warum möchten Sie Tomcat stoppen, sobald es gestartet wird? – Jaydee

+0

Tomcat hängt andere Skripte in meinen Codes ab und manchmal Diese Skripte müssen Tomcat stoppen. –

Antwort

1

Das möchten Sie nicht (*). Um Tomcat sauber anzuhalten, versucht das Stop-Skript eine spezielle Anfrage zu senden. Tomcat-Entwickler haben festgestellt, dass es hier ein mögliches Problem gab, wenn Tomcat Anfragen aus irgendeinem Grund nicht beantworten konnte: nein noch aktiv, teilweise oder total abgestürzt usw. Um es zu lösen, loggen sie einfach ein, dass Tomcat nicht in seiner normalen Aussage ist und fortfahren ein OS-Signal zu zwingen, es zu stoppen. Übrigens läuft das Skript normalerweise mit dem Drucken Tomcat stopped am realen Ende weiter, wenn es in der Lage war, es zu stoppen.

Selbst wenn Sie eine spezielle Version von Tomcat erstellen könnten, die versuchen würde, die Anfrage so schnell wie möglich zu bearbeiten, würde es immer noch einen Moment für eine Race Condition geben, nicht von möglichen Abstürzen.

Wenn Sie einfach nicht wollen, dass die Fehlermeldung angezeigt wird, wickeln Sie einfach das echte Skript mit einem dünnen Wrapper, der die Ausgabe und Fehlerausgabe protokolliert, optional alles für weitere Forschung im Falle eines echten Problems, und gerade Suche nach der Zeichenfolge Tomcat stopped. Wenn es gefunden wird, lassen Sie alles andere fallen und zeigen Sie das an, wenn es nicht nach dem Ende des Skripts gefunden wird, signalisieren Sie den Fehler und geben Sie die volle Ausgabe als Referenz.

(*) wie auch immer, ich kann nicht ein zuverlässiges System für das vorstellen ...

+0

Danke. Ich werde LOGS zu verwenden und bis Shutdown-Listener angezeigt wird, werde ich nicht Tomcat gestoppt wird :) –

+0

Tomcat gibt nie die Zeichenfolge "Tomcat gestoppt" in eine beliebige Protokolldatei. Außerdem wird 'catalina.sh' nur versuchen, den Prozess zu beenden, wenn die Umgebungsvariable' CATALINA_PID' auf einen Dateinamen gesetzt wurde, in dem die Prozess-ID gespeichert werden kann. –