【问题标题】:Deployment of .war reboot race condition.war 重启竞态条件的部署
【发布时间】:2011-11-22 21:50:36
【问题描述】:

我有一个 nsis 安装脚本,它将一个 .war 文件复制到 Tomcat webapps 目录中。如果 Tomcat 已经在运行,它会注意到一个新的.war 被放入webapps 目录并开始解包。然而,解压是在后台进行的,安装程序认为它已经完成,所以它会提示用户重新启动。如果用户选择现在重新启动,那么 Tomcat 很有可能会在解压 .war 的过程中中途中断,并使 web 应用程序处于损坏状态。

我能想到的唯一解决方案是在安装程序启动时停止 Tomcat 服务 (net stop tomcat6),以防止 Tomcat 解压.war。然后在重新启动时,Tomcat 服务将启动并解压。这看起来很脏,因为如果用户选择不立即重新启动,它会使 Tomcat 服务停止(如果有其他正在运行的 web 应用程序,这可能是不可取的)。

无论我采用哪种方式切片,Tomcat 似乎都应该识别出 web 应用程序没有完全解压并自行清理,然后重试。 Tomcat 错误?

【问题讨论】:

  • 安装程序为什么需要重启盒子?
  • @Joe 它是需要重新启动的较大安装脚本的一部分。

标签: tomcat tomcat6 war nsis


【解决方案1】:

您可以poll the currently deployed list of applications 并禁用重启选项,直到您看到您的 web 应用程序可用。

如果您不喜欢通过 Ant/manager 应用程序进行通信,则很有可能使用类似的 JMX 挂钩(我知道至少 JBoss 也有类似的挂钩)。即使没有开箱即用的工具,您自己编写 if 应该也相当容易。

【讨论】:

  • 谢谢,我希望有一个解决方案不会超出我现有的安装程序脚本 (nsis) 或添加额外的部署依赖项 (ant)。
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多