我在我的计算机上下载了tomcat(未作为服务安装)。我正在编写一个脚本来升级在 tomcat 服务器上运行的 Web 应用程序。脚本大致如下:
- 停止雄猫
- 执行多个升级操作
- 启动雄猫
执行升级操作时,我需要知道 tomcat 已完全停止。但是,如果我运行$TOMCAT_HOME/bin/catalina.sh stop
那么该脚本会在 tomcat 实际停止之前退出,如果我在 tomcat 仍在运行时执行升级操作,可能会导致事情崩溃。此外,升级操作可能会很快完成,这可能会导致 tomcat 启动在关闭完成之前执行,从而导致 tomcat 崩溃。
现在我的解决方案是在启动关机后等待 5 秒,但我想知道是否有更优雅的解决方案来解决该问题。
验证进程是否仍在运行的一种方法是使用其进程 ID。 根据您的安装,您应该能够在以下位置找到 tomcat 服务器的进程 ID:
/opt/tomcat/catalina.pid
从理论上讲,如果这个文件是空的,那么这个过程应该已经结束,尽管根据实现和某些情况(tomcat崩溃?),这可能不是真的。为了安全起见,您可以使用在此文件中找到的 pid,然后检查此过程是否仍在运行。
ps -p <pid>
如果进程仍处于活动状态,则上述命令将返回进程的 pid、时间和命令。
另一种选择是检查是否可以绑定某个端口(Tomcat 使用的端口)。如果无法在此端口上绑定,则表示 Tomcat 仍在运行。
无论如何,Felix的解决方案更合适,使用它可能更好。我写我的建议只是为了提供更多选择,也不是所有的 Tomcat 安装都有catalina.pid
(至少默认的没有)。