play stop
Play 2.1相当于什么?
如果我这样做play start
了,我如何干净地终止该过程?
我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
)
如文档中所述:
当您运行 start 命令时,Play 会创建一个新的 JVM 并运行默认的 Netty HTTP 服务器。标准输出流被重定向到 Play 控制台,因此您可以监控其状态。
服务器的进程 ID 在引导时显示并写入 RUNNING_PID 文件。要杀死正在运行的 Play 服务器,只需向进程发送 SIGTERM 以正确关闭应用程序即可。
如果您按 Ctrl+D,Play 控制台将退出,但创建的服务器进程将继续在后台运行。然后关闭分叉的 JVM 的标准输出流,并且可以从 logs/application.log 文件中读取日志记录。
所以我认为你必须使用play run
而不是play start
. 然后你就可以Ctrl+D用来停止播放了。
您可以运行此脚本:
kill $(cat /your-play-project-path/target/universal/stage/RUNNING_PID)
如果您使用该play start
命令运行您的应用程序,则从应用程序目录发出该play stop
命令确实有效,并将停止正在运行的应用程序服务器。
我在 Play 2.1.1 中验证了此功能。
为此,您可以按照此处所述修改 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 系统。
只需Ctrl + D在控制台窗口中按。
您可以致电<your_server_url>/@kill
,例如:http://localhost:9022/app3/@kill