我的bash脚本如何检测到tomcat完全停止?

时间:2012-11-17 13:23:11

标签: bash tomcat

我在我的电脑上下载了tomcat(未作为服务安装)。 我正在编写一个脚本来升级运行在tomcat服务器上的webapp。脚本大致如下:

  • 停止tomcat
  • 执行多项升级操作
  • 启动tomcat

执行升级操作时,我需要知道tomcat已完全停止。但是,如果我运行$TOMCAT_HOME/bin/catalina.sh stop,那么该脚本会在tomcat实际停止之前退出,如果我在tomcat仍在运行时执行升级操作,则可能会导致崩溃。此外,升级操作可能会很快完成,这可能导致tomcat启动在关闭完成之前执行,导致tomcat崩溃。

现在我的解决方案是在关机启动后等待5秒钟,但我想知道是否有更优雅的解决方案。

2 个答案:

答案 0 :(得分:1)

验证进程是否仍在运行的一种方法是使用其进程ID。根据您的安装,您应该能够在以下位置找到tomcat服务器的进程ID:

/opt/tomcat/catalina.pid

理论上,如果此文件为空,那么该过程应该已经结束,尽管取决于实现和某些情况(tomcat崩溃?),这可能不是真的。为了安全起见,您可以获取此文件中的pid,并检查此过程是否仍在运行。

ps -p <pid>

如果进程仍处于活动状态,上面的命令将返回进程的pid,时间和命令。

答案 1 :(得分:0)

另一种选择是检查是否可以绑定某个端口(Tomcat使用的端口)。如果您无法在此端口上绑定,则表示Tomcat仍在运行。

无论如何,Felix的解决方案更合适,使用起来可能更好。我只是写了我的建议,以便提供更多的替代方案,并非所有Tomcat安装都有catalina.pid(至少默认的没有)。