Play Framework 2.1 中相当于“play stop”的是什么?

16
< p >“play stop”在Play 2.1中的等效命令是什么?

如果我执行了“play start”,那么如何干净地终止该进程?

7个回答

18

Windows 上,我正在使用以下脚本来终止当前运行的 play 服务器

@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
运行得很好。你有没有关于在Windows上启动Play应用程序的建议?目前我正在使用“play start”,这很好,但我正在考虑编写一个脚本,在服务器重新启动后自动启动应用程序。理想情况是将应用程序包装成Windows服务,但从我所见,这似乎并不简单。 - Ian
+1 -- 这对我们很有效。我在我们的开发和测试环境的每个子文件夹中都在使用它。 - rishimaharaj
@Ian 几年后,但对于社区来说:请看 play runplay start 之间的区别 -> https://dev59.com/9nHYa4cB1Zd3GeqPMo3Q#16291499 - Benj
@Benj,感谢您的建议,但我认为使用play run/start并没有任何混淆。更多的是关于如何将“play start”包装成一个Windows服务,以便在系统重新启动时自动重启。 - Ian
+1 -- 这个命令在我的Windows开发环境中作为“停止”命令非常好用。我在Intellij中使用这个命令配合“批处理支持”命令以及一个生成的启动脚本来启动/停止我的Play应用程序。 - etspaceman

12

文档所述:

当您运行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。


2
很烦人的是,他们从Play 1中改变了这么多简单的语义。 play start 的意思以前完全不同,而生产则是通过完全不同的方式实现的。 - ripper234
2
是的,这完全不同了;你将不得不重新学习(几乎)所有东西 :-( - ndeverge
play run 运行于开发模式,仅用于开发目的,不适用于生产环境。 - Vladimir Prudnikov

10

您可以运行这个脚本:

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

8
如果您使用play start命令运行应用程序,那么在应用程序目录中发出play stop命令可以停止运行中的应用程序服务器。
我已确认此方法适用于Play 2.1.1。

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

存在控制台,但进程仍然保持运行状态。 - ripper234
1
没错,你说得对。我在开发中总是使用play run,CTRL + D也很好用。但在生产环境中,你需要杀掉进程。 - disperse

0
您可以调用<your_server_url>/@kill,例如:http://localhost:9022/app3/@kill

0
为了实现这一点,您可以修改build.sbt文件,如此描述
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系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接