Подождите, пока кот не закончит запуск - PullRequest
29 голосов
/ 18 декабря 2008

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

Ответы [ 8 ]

39 голосов
/ 18 декабря 2008

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

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

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

8 голосов
/ 03 января 2012

Это не сложно реализовать программно. Вы можете реализовать 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.

2 голосов
/ 03 мая 2013

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

1 голос
/ 18 декабря 2008

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

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

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

0 голосов
/ 01 марта 2018

Я сделал это с помощью следующего кода в jenkins pipelinescript с tomcat. Прежде чем я просто позвоню

sudo /bin/systemctl restart tomcat

И есть запись в моем файле sudoers для пользователя jenkins.

Теперь вот онелинер:

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

Лучше для чтения:

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
0 голосов
/ 31 января 2017

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

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

0 голосов
/ 18 декабря 2008

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

0 голосов
/ 18 декабря 2008

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

Было бы полезно узнать, пытались ли вы выяснить, закончилась ли загрузка вашего контекста или вы просто хотите генерала: «Tomcat запущен, хотя ваши контексты могут быть не полностью загружены ...»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...