Play 2.1的play stop
相当于什么?
如果我play start
,我该如何干净地终止该过程?
答案 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