【发布时间】:2013-02-25 20:26:10
【问题描述】:
对于 Play 2.1,play stop 的等价物是什么?
如果我做了play start,我如何干净地终止进程?
【问题讨论】:
标签: playframework playframework-2.1
对于 Play 2.1,play stop 的等价物是什么?
如果我做了play start,我如何干净地终止进程?
【问题讨论】:
标签: playframework playframework-2.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
)
【讨论】:
play run 和 play start 之间的区别 -> stackoverflow.com/a/16291499/1579667
如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 start 过去的意思完全不同,而生产是使用完全不同的方式实现的。
play run 在开发模式下运行,它用于开发,而不是生产。
你可以运行这个脚本:
kill $(cat /your-play-project-path/target/universal/stage/RUNNING_PID)
【讨论】:
如果您使用play start 命令运行您的应用程序,则从应用程序目录发出play stop 命令确实有效,并且将停止正在运行的应用程序服务器。
我在 Play 2.1.1 中验证了此功能。
【讨论】:
只需在控制台窗口中按 Ctrl + D。
【讨论】:
为此,您可以修改 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 系统。
【讨论】:
您可以拨打<your_server_url>/@kill,例如:http://localhost:9022/app3/@kill
【讨论】: