如果端口已被占用,则终止tomcat

时间:2016-07-15 12:19:40

标签: java tomcat

我有一个在tomcat上运行的Web应用程序,并将其状态报告给另一个监视应用程序(此监视应用程序监视系统中的其他几个进程)。

如果应用程序在tomcat中成功部署,监控应用程序会显示该应用程序是实时且可操作的。

但是,如果tomcat无法侦听Connectorserer.xml元素中配置的端口,则仍会部署应用程序,因此它在监视应用程序中显示为实时。但是,由于Web服务器没有在配置的端口上侦听,因此用户无法实际访问Web应用程序。

有没有办法可以配置tomcat,以便在服务器端口无法侦听时终止(或至少不部署webapps)?

2 个答案:

答案 0 :(得分:1)

我发现这个gist可能会帮助你实现绑定到Tomcat的init事件的逻辑并检查其组件的状态(根据要点中的注释,你可能已经找到了一个相同的maven工件。

创建一个生命周期监听器,类似ConnectorListener,并使其实现LifeCycleListener接口。然后将要点中的代码放入覆盖的lifeCycleEvent方法中(您应该进行一些调整以使其适合)。

然后将其添加到web.xml标记下的<engine>

答案 1 :(得分:0)

您可以在{tomcat_setup}/bin/startup.sh文件中编写一些脚本。

在包含EXECUTABLE=catalina.sh的行后添加以下脚本。

parent=`dirname "$PRGDIR"`
file="$parent"/conf/server.xml
host=`hostname`
#get ports from server.xml
for i in `grep -o "<Connector port=\".*\"" "$file" | cut -d\" -f2`;
do
  #check port is listening
  ret=`cat < /dev/null > /dev/tcp/"$host"/"$i"`
  if [ $? -eq 0 ]; then
        echo "Tomcat is already working!"
        exit 1
  fi
done