3

我们的项目使用 Cruise Control 构建和热部署 Web 应用程序到远程服务器(通过 FTP)以 .war 文件的形式运行 Tomcat。不幸的是,“热”部署似乎无法正常工作,导致我们重新启动 Tomcat 以响应每个部署。我们真的很想自动执行此操作,就像构建本身一样。是否有捷径可寻?

旁注:两台机器都运行 Windows(我认为是 XP 或服务器)。

旁注2:性能并不重要。这是一个集成框。

4

8 回答 8

1

如果您定期安排构建,则可以像这样轻松地将某些内容放入 cron

crontab -e

然后在凌晨 1:30 停止 tomcat

30 1 * * * ./path_to_tamcat/bin/catalina.sh stop

然后 2 分钟后再次启动

32 1 * * * ./path_to_tamcat/bin/catalina.sh start

当然这对于不定期部署来说不是最好的,但是您可以轻松地进行定期部署并计划重启。

于 2008-09-19T20:25:54.033 回答
1

如果您查看 bin 目录中的 tomcat 启动和关闭 .bat(或 .sh)脚本,您会看到它们实际上运行了一个 java 进程来启动 tomcat 或者在关闭的情况下,连接到 tomcats 关闭端口 - 参见conf 目录中的 server.xml。您可以配置您的 build ant 任务以与脚本相同的方式调用 tomcat jar。

于 2008-09-19T22:11:19.927 回答
1

tomcat 是否注册为 Windows 服务?

如果是这样,只需使用 netstart 和 netstop 编写一个 .bat 脚本,并将调用作为部署过程的最后一步。

于 2008-09-20T01:47:43.480 回答
0

这听起来有点像您正在使用小型 Tomcat 部署管理器。我基本上没有这方面的经验,你知道的。也就是说,在我工作的地方,我们使用两种设置。

在 server.xml 文件中,上下文具有reloadable="true"属性。

我们所要做的就是将 WAR 文件放在正确的位置,然后 Tomcat 将其解压缩并重新加载,没问题。

现在当我查看它时,官方配置参考说:

“此功能在应用程序开发过程中非常有用,但它需要大量运行时开销,不建议在已部署的生产应用程序中使用。”

就像我说的,我们从来没有遇到过问题。我们的系统处理大量请求,我们似乎没有问题。不过,我们从未对这两种配置进行过基准测试。

你可能想试一试。至少你会知道这样做是否足够高兴重新加载东西。您也可以检查性能,看看它是否对您有问题。

我应该注意,每隔一段时间,事情就会不正常,无论如何我们都必须重新启动 Tomcat,但这种情况相对较少。

如果这可行,您需要做的就是在正确的位置使用脚本复制 WAR 并监控以确保一切正常。在足够的部署之后,Tomcat 将用完 permgen 空间,因此您必须意识到您可能需要手动重新启动 Tomcat。

其他随机猜测:

  1. 您是直接通过 FTP 进入最终的 WAR 位置吗?也许Tomcat只是试图过早打开它?
  2. 您是否收到任何类型的错误消息?也许这可以帮助您追踪问题?
  3. 您是否尝试过其他版本的 Tomcat(如果您可以使用)?也许 5.5 没有问题(或者 5.0 如果你在 5.5 上)?也许只是一个更新的点发布?
于 2008-09-19T20:36:45.753 回答
0

What version of tomcat are you using? What exactly happens to make it appear as if a "hot" deploy doesn't work?

于 2008-09-19T23:04:28.847 回答
0

可重新加载=“真”

不启用war-files的重新部署(这将自动工作),它可以监视WEB-INF/classes和WEB-INF/lib中文件的变化,这可能不是你想要的。

大多数情况下,在 Tomcat 中重新部署 war 文件时冻结,我能够将其追溯到类加载器泄漏,请参阅Classloader leaks: the dreaded "java.lang.OutOfMemoryError: PermGen space" 异常

于 2008-12-05T11:52:45.867 回答
0

您没有详细说明为什么您的热部署“无法正常工作”,但如果它实际上是由/WEB-INF/lib被锁定的资源引起的(这不是不常见的原因;您经常mail.jar在 JavaMail API 中看到这一点) , 然后只需将Context'antiResourceLocking属性设置为true. 这是一个示例 webapp 的/META-INF/context.xml外观:

<Context antiResourceLocking="true">
    <!-- Your stuff here. -->
</Context>
于 2010-01-21T16:06:30.133 回答
0

在启动时启动 tomcat 的一种方法是使用 cron 使用 @reboot 属性运行它:

打开一个终端并输入:

sudo crontab -e

在文件末尾输入命令:

@reboot /`PATH_TO_WHERE_TOMCAT_INSTALLED`/bin/startup.sh

保存文件并退出。

上述命令将在每次计算机启动时运行一次。

于 2020-10-21T09:15:58.360 回答