如何在bash脚本中监视Tomcat以检测它是否完成了war或应用程序的部署?
场景:
- Tomcat以
systemd
启动 - Tomcat以
catalina.sh
启动 - 使用Tomcat Manager
- Tomcat从Eclipse开始
- SpringBoot上的嵌入式Tomcat
我的答案如下。
使用systemd
如果使用systemctl或catalina.sh启动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"
使用catalina.sh
如果使用Apache包中的catalina.sh run
(使用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>&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"