Mam skrypt, który musi zostać uruchomiony po zakończeniu rozruchu tomcat i jest gotowy do rozpoczęcia wdrażania aplikacji. Używam $TOMCAT_HOME/bin/startup.sh
, która natychmiast zwraca. Jak mogę poczekać, aż kocur się zakończy?Poczekaj, aż uruchomi się tomcat
Odpowiedz
Istnieje prawdopodobnie kilka sposobów, aby to zrobić. Używamy podstępu:
#!/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!
Mam nadzieję, że to pomoże!
Zależy od tego, co rozumiesz przez wykańczanie. Na co chcesz czekać?
Można na przykład mieć skrypt, który wielokrotnie uderza w adres URL, dopóki nie uzyska pożądanego wyniku, który byłby dostępny tylko po prawidłowym zainicjowaniu aplikacji.
Istnieje również możliwość użycia detektora kontekstowego, który wypisze plik "Jestem gotowy", który służy do sygnalizowania gotowości aplikacji. (Jeśli to zrobisz, upewnij się, że plik nie istnieje przed uruchomieniem kontenera aplikacji).
Nie ma łatwej metody. Jeśli chodzi o startup.sh i catalina.sh, tomcat jest uruchomiony po ich zakończeniu. Chociaż wewnętrznie tomcat nadal inicjuje i uruchamia konteksty.
To pomogłoby wiem, czy próbowali dowiedzieć się, czy kontekst zakończeniu ładowania lub jeśli po prostu chcą ogólnie, „Tomcat jest runnnig chociaż twoje konteksty może nie być w pełni załadowany ...”
Jeśli jest to drugie, możesz stworzyć aplikację internetową, która po prostu posiada detektor kontekstu, który wykona skrypt za pomocą środowiska wykonawczego. Jeśli byłbyś przydatny, możesz ustawić konfigurację webapp poprzez plik web.xml, aby zaakceptować parametr wskazujący skrypt do wykonania.
Osobiście oglądałbym dziennik Catalinas dla określonego ciągu znaków, w zależności od konfiguracji i fazy, której szukasz.
Masz na myśli "oglądaj" programowo, oczywiście. – OscarRyz
Nie jest trudno wdrożyć programowo. Można zaimplementować org.apache.catalina.LifecycleListener i wtedy będziesz mieć
public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT))
//do what you want
}
}
w web.xml:
<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>
Proszę zauważyć, że niektóre rzeczy mogą się różnić między 6-9 Kocurek.
Wydaje się interesujące. Zastanów się, co powinienem zrobić dalej z tą klasą? Jak zarejestrować go w tomcat, jak ten kod może się komunikować z moim skryptem/mrówką, itp.? –
Nadal szukasz odpowiedzi? To zależy od twojej definicji rozpoczęcia. Jeśli Twoja definicja uruchomienia to "Teraz można bezpiecznie zatrzymać", możesz sprawdzić, czy port 8005 nasłuchuje.
Potrzebowałem tego, aby przetestować jenkinsa, czy tomcat ze zdalnego serwera został uruchomiony w celu sprawdzenia systemu.
until [[ `ssh -o StrictHostKeyChecking=no [email protected]${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done
Zrobiłem go z następującego kodu w jenkins pipelinescript Tomcat. Przed i po prostu zadzwonić
sudo /bin/systemctl restart tomcat
I mieć wpis w moim pliku sudoers dla użytkownika jenkins.
Teraz tutaj jest 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
lepiej czytelne:
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. Poczekaj, aż kolejkaUserWorkItem zakończy się
- 2. Poczekaj, aż zakończy się Application.Calculate
- 3. AutoIT Poczekaj, aż element kontrolny pojawi się
- 4. Poczekaj, aż strona zostanie odświeżona
- 5. Poczekaj, aż funkcja zostanie załadowana
- 6. Android Espresso: Poczekaj, aż aktywność się zakończy/uruchom
- 7. Poczekaj, aż baza danych uzyska dane
- 8. Poczekaj wewnątrz metody, aż zostanie przechwycone zdarzenie
- 9. jQuery .load() Poczekaj, aż zawartość zostanie załadowana.
- 10. Poczekaj, aż poprzednie .append() zostanie zakończone
- 11. Poczekaj, aż zostanie uruchomione zdarzenie kliknięcia C#
- 12. Usługa Tomcat 6.0.18 nie uruchomi się na serwerze Windows.
- 13. Poczekaj na funkcję, aż użytkownik przestanie pisać
- 14. WinGHCi się nie uruchomi
- 15. jQuery Dołącz plik CSS i poczekaj aż do załadowania?
- 16. Python selenu: poczekaj, aż element będzie klikalny - nie działa
- 17. Poczekaj, aż elementy HTML otrzymają klasę, a następnie coś zrób.
- 18. jQuery Poczekaj, aż asynchroniczne wywołania ajax zostaną zakończone
- 19. Poczekaj aż obietnicy i zagnieżdżone thens są kompletne
- 20. jQuery: Poczekaj, aż wiele żądań GET zostanie pomyślnie przetworzonych.
- 21. Poczekaj, aż wszystkie wątki zakończył swoją pracę w puli wątków
- 22. Poczekaj, aż element będzie zawierał określony tekst z CasperJS
- 23. Proste jądro nie uruchomi się w GRUB
- 24. Openshift Połączenie Layer4, aplikacja się nie uruchomi
- 25. Scanf nie uruchomi się po raz drugi
- 26. Emulator Azure Compute Emulator się nie uruchomi
- 27. Konsola Production Rails nie uruchomi się
- 28. Emulator systemu Android 4.0 nie uruchomi się
- 29. Co się stanie, gdy uruchomi się program java?
- 30. Bash poczekaj na rozpoczęcie procesu
jeśli używasz na przykład grep '302 Znaleziono "zamiast grep" Coyote ", to może być również używane na serwerach innych niż Tomcat - np. aby sprawdzić gotowość serwera Jenkins. – vorburger
Jeszcze lepiej: użyj 'curl --silent --write-out '% {response_code} -o/dev/null' [url] ''. To daje ci kod odpowiedzi i możesz go użyć z '[' do przetestowania dowolnej wartości, którą uważasz za właściwą. Prawdopodobnie będziesz także chciał ograniczyć przekierowania. –