【问题标题】:How to stop the application from within in Openshift如何在 Openshift 中从内部停止应用程序
【发布时间】:2016-12-02 14:45:03
【问题描述】:

我希望能够每 3 天从内部停止我的应用程序。我只是想安排一个方法来自动停止应用程序,而无需任何外部干预(比如坐在我的桌面上等)。

到目前为止,我想到了这些:

Runtime.getRuntime().exec("rhc stop-app --app ApplicationName"); //This doesn't work. I have tried it

或者

System.exit(0) // I am told to not run this command on openshift server

或者

Runtime.getRuntime().exit(0) //I am afraid to run this command

或者

Runtime.getRuntime().halt(0) //I am afraid to run this command as well      

其中一些命令我不敢使用,因为我被告知不要在 openshift 服务器上运行它们,因为它们实际上可能会停止整个虚拟机。这将停止该虚拟机上托管的所有应用程序。那会让我被禁止。我会被封号的。

编辑:这个问题一般不是如何停止应用程序。这个问题是关于如何停止托管在 OpenShift 服务器上的 Spring MVC wep 应用程序。并且没有这些答案在该链接中不起作用。

【问题讨论】:

  • 您需要做的就是根据逻辑条件停止您的应用程序,例如while (validConditionToContinue()) { yourProcessingHere(); }。当条件不再适用时,程序将自然退出。由您的应用程序触发它如何退出该循环。
  • @ManoDestra 我想要一个特定的命令来停止应用程序。该特定命令是 Runtime.getRuntime().exit(0)。谢谢
  • 不好的做法。除非发生了需要立即退出应用程序的绝对灾难性事件,否则您不应要求该命令。它不应用于正常退出应用程序。这可以使用普通逻辑非常简单地完成。除非您使用关闭挂钩:stackoverflow.com/questions/3715967/…。您当前的上述要求与该场景并不匹配。你应该用逻辑来处理它,并且比使用运行时强制退出更优雅地退出你的应用程序。
  • @ManoDestra 我已经意识到我的方法存在问题。我会称之为意想不到的副作用。副作用是我的应用程序会在一段时间后自动重新启动。哈哈。我不想要那个。我有 Runtime.getRuntime().exit(0) 专门为了不发生这种情况。我不希望我的应用程序在没有我重新启动的情况下重新启动!现在,来到你的方法。如果我按照您的方法进行,那么程序仍然不会停止。如果是假的,就不要运行我的进程。但是申请还在!当然它不会运行我的进程,但我的应用程序仍在运行。
  • @ManoDestra 我想要我的应用程序的句号!有办法吗?谢谢

标签: java openshift


【解决方案1】:

好吧,我刚刚使用了Runtime.getRuntime().exit(0),它成功地停止了我的应用程序。我没有得到禁令或任何东西。我重新启动了我的应用程序,看看是否有任何问题。没有问题。所以那个命令就可以了。谢谢

edit:这可行,但 openshift 会自动重新启动应用程序。所以这不是答案。如果我找到答案,我会把答案放在这里。谢谢

【讨论】:

  • 你有没有意识到openshift是一个应用服务器而不是一个应用程序?您正在杀死整个应用程序服务器只是为了停止应用程序中的一个进程?
  • 是的,我知道。他们有安全检查。没有人可以在他们的代码中只使用像 System.exit() 这样的简单命令并停止整个服务器。他们不允许那样做。所以是的,我不会杀死整个服务器。我只想在一段时间后杀死我自己的应用程序。因此问题
猜你喜欢
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多