Ich habe ein Skript, das nach dem Start von Tomcat ausgeführt werden muss und bereit ist, mit der Bereitstellung von Anwendungen zu beginnen. Ich verwende $TOMCAT_HOME/bin/startup.sh
, die sofort zurückkehrt. Wie kann ich warten bis Tomcat fertig ist?Warten bis Tomcat fertig ist
Antwort
Es gibt wahrscheinlich mehrere Möglichkeiten, dies zu tun. Der Trick, den wir verwenden, ist:
#!/bin/bash
until [ "`curl --silent --show-error --connect-timeout 1 -I http://localhost:8080 | grep 'Coyote'`" != "" ];
do
echo --- sleeping for 10 seconds
sleep 10
done
echo Tomcat is ready!
Hoffe, das hilft!
Hängt davon ab, was Sie mit dem Finishing meinen. Auf was willst du warten?
Sie könnten beispielsweise ein Skript verwenden, das eine URL wiederholt anspricht, bis ein wünschenswertes Ergebnis erzielt wird, das nur dann verfügbar ist, wenn die App ordnungsgemäß initialisiert wurde.
Sie könnten auch einen Context-Listener haben, der eine "Ich bin bereit" -Datei ausgibt, mit der Sie die Bereitschaft Ihrer Anwendung signalisieren. (Wenn Sie dies tun, stellen Sie sicher, dass die Datei nicht existiert, bevor Sie den App-Container starten).
Es gibt keine einfache Methode. Soweit es startup.sh und catalina.sh betrifft, läuft Tomcat, wenn sie fertig sind. Tomcat initialisiert und initialisiert intern noch Kontexte.
Es würde helfen wissen, ob Sie, wenn Ihr Kontext Laden oder wenn Sie nur ein allgemeines wollen fertig sind, um herauszufinden versuchen, „Tomcat runnnig obwohl Ihre Kontexte nicht vollständig geladen sein könnten ...“
Wenn es Letzteres ist, könnten Sie eine Web-App erstellen, die einfach einen Context-Listener hat, der ein Skript mit Runtime ausführt. Wenn Sie praktisch sind, können Sie die Webanwendung über die Datei web.xml konfigurieren, um einen Parameter zu akzeptieren, der auf das auszuführende Skript verweist.
Persönlich würde ich nur Catalinas Protokoll für eine bestimmte Zeichenfolge je nachdem, wie Ihre Einrichtung und welche genaue Phase Sie suchen.
Sie meinen "watch" natürlich programmatisch. – OscarRyz
Es ist nicht schwer, programmatisch zu implementieren. Sie können org.apache.catalina.LifecycleListener implementieren und dann werden Sie
public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT))
//do what you want
}
}
in web.xml haben:
<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>
Bitte beachten Sie, dass einige Dinge zwischen 6-9 Tomcats unterscheiden.
Scheint interessant. Was soll ich als nächstes mit dieser Klasse tun? Wie kann ich den Tomcat registrieren, wie kann dieser Code mit meinem Script/Ant kommunizieren? –
Suchen Sie noch nach einer Antwort? Es hängt von Ihrer Definition von gestartet ab. Wenn Ihre Definition von "Jetzt ist sicher zu stoppen" ist, sollten Sie überprüfen, ob der Port 8005 gehört.
Ich brauchte dies, um von jenkins zu testen, wenn der Tomcat vom Remote-Server für eine Systemprüfung gestartet wurde.
until [[ `ssh -o StrictHostKeyChecking=no [email protected]${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done
Ich habe es mit dem folgenden Code in jenkins pipelinescript mit tomcat getan. Bevor ich nenne nur
sudo /bin/systemctl restart tomcat
und einen Eintrag in meiner sudoers-Datei für den Benutzer jenkins.
Jetzt ist hier die oneliner:
until [ "$(curl -w '%{response_code}' --no-keepalive -o /dev/null --connect-timeout 1 -u USERNAME:PASSWORD http://localhost:8080/manager/text/list)" == "200" ]; do echo --- sleeping for 1 second; sleep 1; done
besser lesbar:
until [ "$(curl -w '%{response_code}' --no-keepalive -o /dev/null --connect-timeout 1 -u USERNAME:PASSWORD http://localhost:8080/manager/text/list)" == "200" ];
do echo --- sleeping for 1 second;
sleep 1;
done
- 1. Warten, bis System.Diagnostics.Process.Start fertig ist
- 2. Wie warten, bis ein Animator fertig ist?
- 3. Wie warten, bis ein ThreadPoolExecutor fertig ist
- 4. Java warten, bis JFrame fertig ist
- 5. Warten bis ein SwingWorker fertig ist?
- 6. Warten Sie, bis alle Arbeiter fertig sind
- 7. jQuery UI-Dialog - warten bis die Animation fertig ist
- 8. VBScript scheint zu warten, bis Excel Macro fertig ist?
- 9. Warten Sie, bis der Ajax-Anruf für Capybara fertig ist.
- 10. Warten, bis pthread_create fertig ist, ohne pthread_join zu verwenden
- 11. Einen Zukunftsblock erstellen, bis es fertig ist
- 12. Ausführen von CKQuery in AppDelegate - warten bis fertig
- 13. Warten Sie, bis alle Threads im Service fertig sind.
- 14. Wie warten Sie, bis alle Hintergrundthreads fertig sind (in C#)?
- 15. Warten bis Boolean in Swift True ist?
- 16. Wie ist es besser zu warten, bis eine asynchrone Methode in der iPhone App fertig ist?
- 17. Was ist der beste Weg zu warten, bis eine Animation in MVVM fertig ist?
- 18. warten, bis ein Jenkins Build abgeschlossen ist
- 19. Warten bis Datei vollständig geschrieben ist
- 20. Ausrichtung sperren, bis Asynctask fertig ist
- 21. QML: warte bis Animationen fertig
- 22. Warten Sie, bis der Prozess beendet ist
- 23. Warten Sie, bis jQuery show() fertig ist, bevor die Funktion fortgesetzt wird?
- 24. Wie kann ich einen neuen Prozess starten und warten bis er fertig ist?
- 25. Wie warten Sie, bis ein Prozess mit tcl-expect fertig ist
- 26. Start n Unterprozesse in bash und warten bis alles fertig ist
- 27. React.js, warten, bis setState fertig ist, bevor eine Funktion ausgelöst wird?
- 28. "Block" UI-Thread, bis Hintergrundarbeiter fertig
- 29. Winkelmesser Warten, bis die Animation abgeschlossen ist
- 30. Javascript warten bis Cookie gleich "1" ist
, wenn Sie verwenden z.B. grep '302 Found' statt grep 'Coyote', dann kann dies auch auf Nicht-Tomcat-Servern verwendet werden - z. um die Verfügbarkeit eines Jenkins-Servers zu überprüfen. – vorburger
Noch besser: benutze 'curl --silent --write-out '% {response_code} -o/dev/null' [url] ''. Das gibt Ihnen den Antwortcode, und Sie können es mit '[' verwenden, um jeden Wert zu testen, den Sie für angemessen halten. Sie werden wahrscheinlich auch Weiterleitungen einschränken wollen. –