什么相当于Play Framework 2.1的'play stop'?

时间:2013-02-25 20:26:10

标签: playframework playframework-2.1

Play 2.1的play stop相当于什么?

如果我play start,我该如何干净地终止该过程?

7 个答案:

答案 0 :(得分:18)

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
) 

答案 1 :(得分:12)

如上所述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 来停止游戏了。

答案 2 :(得分:10)

您可以运行此脚本:

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

答案 3 :(得分:8)

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

我在Play 2.1.1中验证了这一点。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

要实现此目的,您可以修改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系统。

答案 6 :(得分:0)

您可以拨打<your_server_url>/@kill,例如:http://localhost:9022/app3/@kill