-1

如何在 bash 脚本中监视Tomcat以检测它是否已完成部署战争或应用程序?

场景:

  • Tomcat 开始于systemd
  • Tomcat 开始于catalina.sh
  • 使用 Tomcat 管理器
  • Tomcat 从 Eclipse 启动
  • SpringBoot 上的嵌入式 Tomcat

我的回答如下。

4

1 回答 1

0

如果您使用systemd
systemctl 或 catalina.sh 使用 systemctl 启动 Tomcat,则可以这样做。更改demo.war为您的战争名称,调整睡眠时间以.根据需要显示尽可能多的(点)。如果部署需要 30 秒,它将显示 30 个点。

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

Withcatalina.sh
If catalina.sh runfrom Apache package is used (using catalina.sh startwill not work)

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>&1 &) && 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

如果从 Eclipse 启动 tomcat

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

使用 SpringBoot Actuator
如果您的 Spring Boot 应用使用Spring Boot Actuator并配置为

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"
于 2021-07-05T22:48:19.353 回答