我们的项目使用Cruise Control将Web应用程序构建和热部署到远程服务器(通过FTP),以.war文件的形式运行Tomcat。遗憾的是,“热”部署似乎无法正常工作,导致我们重新启动Tomcat以响应每个部署。我们真的很喜欢自动魔术,就像构建本身一样。有一个简单的方法吗?
旁注:两台机器都运行Windows(我认为是XP或服务器)。
旁注2:表现并不重要。这是一个集成框。
答案 0 :(得分: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
授予此功能不适合不规则部署,但您可以轻松定期重新启动定期部署。
答案 1 :(得分:1)
如果你看一下bin目录中的tomcat启动和关闭.bat(或.sh)脚本,你会看到他们实际运行一个java进程来启动tomcat或者在关闭的情况下,连接到tomcats shutdown port - 请参阅conf目录中的server.xml。 您可以将build ant任务配置为以与脚本相同的方式调用tomcat jar。
答案 2 :(得分:1)
tomcat是否已注册为Windows服务?
如果是这样,只需使用netstart和netstop编写.bat脚本,并将被调用作为部署过程的最后一步。
答案 3 :(得分:0)
对我来说听起来有点像你正在使用小Tomcat部署管理器的事情。我基本上没有这方面的经验,只是你知道。也就是说,在我工作的地方,我们使用两种设置。
在server.xml文件中,上下文的属性为 reloadable =“true”。
我们所要做的就是将WAR文件放在正确的位置,然后Tomcat将其解压缩并重新加载,没问题。
现在,当我查找时,official configuration reference说:
像我说的那样,我们从未遇到过问题。我们的系统处理大量请求,我们似乎没有问题。我们从未对这两种配置进行基准测试。“此功能在应用程序开发期间非常有用,但它需要大量的运行时开销,不建议在已部署的生产应用程序上使用。”
你可能想尝试一下。至少你会学到它是否足够快乐,以这种方式重新加载东西。您也可以检查性能,看看它是否适合您。
我应该注意,每隔一段时间事情都不对,我们无论如何都要重启Tomcat,但这种情况比较少见。
如果这样做,您需要做的就是让脚本在正确的位置复制WAR并监视以确保工作正常。在足够的部署之后,Tomcat将耗尽permgen空间,因此您必须意识到您可能需要手动重启Tomcat。
其他随机猜测:
答案 4 :(得分:0)
您使用的是什么版本的tomcat? 究竟是什么让它看起来好像“热”部署不起作用?
答案 5 :(得分:0)
再装= “真”
不支持重新部署war-files(这将自动运行),它可以监视WEB-INF / classes和WEB-INF / lib中文件的更改,这可能不是你想要的。
大多数情况下,当Tomcat中的war-files重新部署冻结时,我能够将其追溯到类加载器泄漏,请参阅Classloader leaks: the dreaded "java.lang.OutOfMemoryError: PermGen space" exception
答案 6 :(得分:0)
您没有详细说明为什么您的热部署“无法正常工作”,但是如果它实际上是由/WEB-INF/lib
中的资源锁定(这不是一个不常见的原因;您看到这个通常使用JavaMail API的mail.jar
,然后只需将Context
的{{1}}属性设置为antiResourceLocking
。以下是webapp true
的示例:
/META-INF/context.xml
答案 7 :(得分:0)
一种在启动时启动tomcat的方法是使用cron使用@reboot属性运行它:
打开一个终端并输入:
sudo crontab -e
在文件末尾输入命令:
@reboot /`PATH_TO_WHERE_TOMCAT_INSTALLED`/bin/startup.sh
保存文件并退出。
每次计算机启动时,以上命令都会运行该命令。