【问题标题】:What is the equivalent to 'play stop' for Play Framework 2.1?Play Framework 2.1 的“播放停止”是什么?
【发布时间】:2013-02-25 20:26:10
【问题描述】:

对于 Play 2.1,play stop 的等价物是什么?

如果我做了play start,我如何干净地终止进程?

【问题讨论】:

    标签: playframework playframework-2.1


    【解决方案1】:

    Windows我正在使用以下脚本来杀死当前正在运行的播放服务器

    @echo off
    if exist RUNNING_PID (
      setlocal EnableDelayedExpansion
      set /p PLAY_PID=<RUNNING_PID
      echo killing pid !PLAY_PID!
      taskkill /F /PID !PLAY_PID!
      del RUNNING_PID
      endlocal
    ) 
    

    【讨论】:

    • 效果很好。您对在 Windows 上启动 Play 应用程序有什么建议吗?目前我正在使用“播放开始”,这很好,但我正在考虑编写一个脚本,该脚本将在服务器重新启动后自动启动应用程序。理想的方案是将应用程序包装在 Windows 服务中,但据我所知,这似乎并不简单。
    • +1 -- 这对我们有用。我在我们的开发和测试环境的每个子文件夹中都使用它。
    • @Ian 几年后,但对于社区:查看 play runplay start 之间的区别 -> stackoverflow.com/a/16291499/1579667
    • @Benj 感谢您的输入,但我认为是否应该使用 play run/start 没有任何混淆。更多的是关于如何将“播放开始”包装到 Windows 服务中,该服务将在系统重新启动时自动重新启动。
    • +1 -- 这在我的 Windows 开发环境中作为“停止”命令非常有用。我将它与 Intellij 中的“批量支持”命令以及 Stage + 生成的启动脚本一起使用,以在 Windows IntelliJ 中启动/停止我的播放应用程序。
    【解决方案2】:

    in the doc所述:

    当您运行 start 命令时,Play 会创建一个新的 JVM 并运行默认的 Netty HTTP 服务器。标准输出流被重定向到 Play 控制台,因此您可以监控其状态。

    服务器的进程 ID 在引导时显示并写入 RUNNING_PID 文件。要终止正在运行的 Play 服务器,只需向进程发送 SIGTERM 即可正确关闭应用程序。

    如果您按 Ctrl+D,Play 控制台将退出,但创建的服务器进程将继续在后台运行。然后关闭分叉的 JVM 的标准输出流,并且可以从 logs/application.log 文件中读取日志记录。

    所以我认为你必须使用play run 而不是play start。然后你就可以使用 Ctrl+D 来停止播放了。

    【讨论】:

    • 令人讨厌的是,他们从 Play 1 中改变了如此多的这些简单语义。play start 过去的意思完全不同,而生产是使用完全不同的方式实现的。
    • 是的,完全不同;你必须重新学习(几乎)所有东西:-(
    • play run 在开发模式下运行,它用于开发,而不是生产。
    【解决方案3】:

    你可以运行这个脚本:

    kill $(cat /your-play-project-path/target/universal/stage/RUNNING_PID)
    

    【讨论】:

      【解决方案4】:

      如果您使用play start 命令运行您的应用程序,则从应用程序目录发出play stop 命令确实有效,并且将停止正在运行的应用程序服务器。

      我在 Play 2.1.1 中验证了此功能。

      【讨论】:

        【解决方案5】:

        只需在控制台窗口中按 Ctrl + D

        【讨论】:

        • 那个控制台存在,但是进程还在。
        • 是的,你是对的。我总是在开发中使用 play run 并且 CTRL + D 工作正常。在生产中,您需要终止该进程。
        【解决方案6】:

        为此,您可以修改 build.sbt 文件 as described here

        TaskKey[Unit]("stop") := {
          val pidFile = target.value / "universal" / "stage" / "RUNNING_PID"
          if (!pidFile.exists) throw new Exception("App not started!")
          val pid = IO.read(pidFile)
          s"kill $pid".!
          println(s"Stopped application with process ID $pid")
        }
        

        但是,这只适用于 *nix 系统。

        【讨论】:

          【解决方案7】:

          您可以拨打&lt;your_server_url&gt;/@kill,例如:http://localhost:9022/app3/@kill

          【讨论】:

            猜你喜欢
            • 2013-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-03
            • 2017-12-10
            • 1970-01-01
            • 2013-01-06
            • 1970-01-01
            相关资源
            最近更新 更多