Следите за tomcat в Bash, пока он не завершит развертывание war или приложения

#bash #eclipse #spring-boot #tomcat #tomcat-manager

Вопрос:

Как можно было отслеживать Tomcat в сценарии bash, чтобы обнаружить, что он завершил развертывание войны или приложения?

Сценарии:

  • Кот начал с systemd
  • Кот начал с catalina.sh
  • Использование диспетчера Tomcat
  • Tomcat стартовал с затмения
  • Встроенный кот на пружине

Мой ответ ниже.

Ответ №1:

С systemd
Если вы запустите Tomcat с systemctl или catalina.sh использует systemctl что-то подобное можно было бы сделать. Измените demo.war свое военное имя, отрегулируйте период сна, чтобы отображалось столько . (точек), сколько необходимо. Если для развертывания потребуется 30 секунд, на нем будет отображаться 30 точек.

 while ! systemctl status tomcat --no-pager | grep -q 'Deployment of.*demo.war.* has finished'; do 
echo -ne "."; sleep 1; 
done amp;amp; echo "War deployed"
 

С catalina.sh
Если catalina.sh run используется пакет из Apache (использование catalina.sh start не будет работать)

 while read -r line; do
    if echo "$line" | grep -q 'Deployment of.*[/]demo.war.* has finished' ; then
        echo "***** $line"
        # do some stuff with your app
        break
    else
        echo "---- $line"
    fi
done < <(./bin/catalina.sh run 2>amp;1 amp;) amp;amp; echo "War deployed"
# start tomcat ----------^
# with console output but in background

./bin/catalina.sh stop
 

Файл журнала мониторинга
Возможно, потребуются разрешения для файла журнала.

 log='/var/log/tomcat/catalina.2021-07-05.log'
msg='Deployment of.*[/]demo.war.* has finished'
while read -r line; do
    if echo "$line" | grep -q "$msg" ; then
        echo "***** $line"
        # do some stuff with your app
        break
    else
        echo "---- $line"
    fi
done < <(tail -n 1 -f "$log")
echo "War deployed"
sleep 5 # get a chance to see the previous message :-p
 

Если запустить tomcat из Eclipse

 log='/home/lmc/workspace/.metadata/.plugins/org.eclipse.wst.server.core/logs/catalina.out'
msg='Deployment of deployment descriptor .*demo.xml. has finished'
# same code as above
 

С менеджером Tomcat
С настроенным менеджером Tomcat:

 until ! curl -u userblah:s3cr3t --silent "http://localhost:8080/manager/text/list" | grep '^[/]demo:running'; do
    echo "Deploying 'demo' app"
    sleep 1
done
 

С пружинным Приводом
Если ваше приложение Spring boot использует привод Spring Boot и настроено как

 management.endpoints.web.exposure.include=health
management.endpoints.web.base-path=/actuator
management.server.port=8081
management.server.address=127.0.0.1
 

Его можно контролировать как:

 until curl --silent "http://127.0.0.1:8081/actuator/health" | grep -q 'status":"UP'; do
    echo "Deploying 'demo' app"
    sleep 1
done
echo "is UP"