【问题标题】:Grails forked tomcat execution not workingGrails分叉的tomcat执行不起作用
【发布时间】:2013-01-30 22:08:30
【问题描述】:

Grails 2.2.0

我加了

grails.project.fork.run=true

到 Config.groovy 文件。在命令行上,发出:

grails run-app

我对 fork 能力的理解是 grails 系统会退出,让 tomcat 继续运行。但它永远不会退出。我必须 control+c 才能离开它,这也会杀死 tomcat。所以我不相信tomcat被分叉了。我错过了什么吗?

在运行应用程序时,我在顶部和活动监视器中都看到了一个 Java 进程。我在执行时也只看到一个进程:

ps aux | grep java

根据 Ian 回答中的 cmets,我应该看到 2 个进程。

【问题讨论】:

  • 这个bug在2.5.4中依然存在,文档依然不正确。在分叉容器运行的同时,无法退出 grails 交互式控制台。

标签: tomcat grails fork


【解决方案1】:

文档具有误导性,您必须将该配置行放入 BuildConfig.groovy,而不是 Config.groovy(已尝试使用 2.2.1 版)。

【讨论】:

  • 如果你是对的,那就没有误导性。这是完全错误的。 ;o)。我会试一试并报告...
【解决方案2】:

即使在“分叉”模式下,应用仍会在前台运行。分叉的目的是在与 run-app script 不同的进程中运行 Grails 应用程序,以便将应用程序的类路径与运行程序的类路径隔离(例如,如果它需要依赖某些核心库的不同版本)。

【讨论】:

  • 说明不是这样说的......"请注意,在分叉模式下,grails 进程将退出并让容器在后台运行。要停止服务器,有一个新的 stop-app 命令: " 如果我​​仍然被锁定,我将如何发出 stop-app 命令?
  • @Gregg 然后代码不同意文档,它肯定在分叉进程上执行waitFor...您可以从另一个终端运行stop-app,或者因为(查看脚本) stop-app 所做的只是向 http://localhost:<port+1> 发出 http 请求(即,如果应用程序在 8080 上,则为 8081)您可以自己从浏览器中执行相同的操作。
  • 不怀疑你,只是尽我所能。我可以通过查看正在运行的进程以某种方式确认这一点吗?例如,如果我执行 top,我会看到 2 个进程用于分叉执行,而 1 个进程用于非分叉执行?
  • @Gregg 是这样的想法。在分叉的情况下,应该有第二个java 进程,其主类是org.grails.plugins.tomcat.fork.ForkedTomcatServer
  • 嗯,我只通过 top 和 Activity Monitor 看到一个 java 进程。做一个ps aux | grep java,我只看到一个进程。我要将此信息添加到我的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多