Подтвердить что ты не робот

Подождите, пока tomcat не завершит запуск

У меня есть script, который должен запускаться после завершения работы tomcat и готов начать развертывание приложений. Я использую $TOMCAT_HOME/bin/startup.sh, который немедленно возвращается. Как я могу подождать, пока tomcat не закончит работу?

4b9b3361

Ответ 1

Есть, вероятно, несколько способов сделать это. Мы используем трюк:

#!/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!

Надеюсь, это поможет!

Ответ 2

Это не сложно реализовать программно. Вы можете реализовать org.apache.catalina.LifecycleListener, а затем у вас будет

public void lifecycleEvent(LifecycleEvent lifecycleEvent) {
            if(lifecycleEvent.getType().equals(Lifecycle.START_EVENT))
            //do what you want
            }       
}

в web.xml:

<Context path="/examples" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>

Обратите внимание, что некоторые вещи могут отличаться между 6-9 Tomcats.

Ответ 3

Вы все еще ищете ответ? Это зависит от вашего начального определения. Если ваше начальное определение "Теперь его безопасно остановить", вы можете проверить, прослушивает ли порт 8005.

Ответ 4

В зависимости от того, что вы подразумеваете, заканчивая. Чего вы ждете?

У вас может быть, например, script, который несколько раз ударяет URL-адрес, пока не получит желаемый результат, который будет доступен только после правильной инициализации приложения.

У вас также может быть прослушиватель контекста, который записывает файл "Я готов", который вы используете, чтобы сигнализировать о готовности вашего приложения. (Если вы это сделаете, убедитесь, что файл не существует, прежде чем запускать контейнер приложения).

Ответ 5

Нет простого метода. Что касается startup.sh и catalina.sh, то tomcat работает, когда они заканчиваются. Хотя внутри, tomcat все еще инициализирует и запускает контексты.

Это поможет узнать, пытаетесь ли вы выяснить, закончил ли ваш контекст загрузку или если вы просто хотите генерала, "Tomcat runnnig, хотя ваши контексты могут быть не полностью загружены..."

Если это последний, вы можете создать веб-приложение, которое просто имеет прослушиватель контекста, который будет выполнять script с использованием Runtime. Если бы вам было удобно, вы можете настроить webapp через файл web.xml, чтобы принять параметр, который указывает на выполняемый script.

Ответ 6

Лично я бы просто смотрел журнал каталогов для определенной строки в зависимости от того, как ваша настройка и какая именно фаза вам нужна.

Ответ 7

Мне нужно было это проверить у jenkins, если tomcat с удаленного сервера запустился для проверки системы.

until [[ `ssh -o StrictHostKeyChecking=no [email protected]${DEPLOY_HOST} 'netstat -tulpn | grep 8005'` != "" ]] ; do echo "waiting for tomcat"; sleep 6; done