Tương đương với play stop
cho Play 2.1 là gì?Tương đương với 'điểm dừng phát' cho Play Framework 2.1 là gì?
Nếu tôi đã làm play start
, làm cách nào để chấm dứt hiệu quả quy trình?
Tương đương với play stop
cho Play 2.1 là gì?Tương đương với 'điểm dừng phát' cho Play Framework 2.1 là gì?
Nếu tôi đã làm play start
, làm cách nào để chấm dứt hiệu quả quy trình?
Như đã nêu in the doc:
Khi bạn chạy lệnh bắt đầu, Chơi dĩa một JVM mới và chạy máy chủ mặc định Netty HTTP. Luồng đầu ra tiêu chuẩn được chuyển hướng đến Play Console, vì vậy bạn có thể theo dõi trạng thái của nó.
Id quá trình của máy chủ được hiển thị tại bootstrap và được ghi vào tệp RUNNING_PID. Để giết một máy chủ đang chạy, nó là đủ để gửi một SIGTERM cho quá trình để tắt đúng ứng dụng.
Nếu bạn nhập Ctrl + D, bảng điều khiển Play sẽ thoát, nhưng quá trình máy chủ được tạo sẽ tiếp tục chạy ở chế độ nền. Luồng đầu ra tiêu chuẩn của JVM được chia đôi sau đó được đóng lại và việc ghi nhật ký có thể được đọc từ tệp log/application.log.
Vì vậy, tôi nghĩ rằng bạn phải sử dụng play run
thay vì play start
. Sau đó, bạn sẽ có thể sử dụng Ctrl + D để dừng phát.
Nếu bạn chạy ứng dụng của mình bằng lệnh play start
, hãy phát lệnh play stop
từ thư mục ứng dụng sẽ hoạt động và sẽ dừng máy chủ ứng dụng đang chạy.
Tôi đã xác minh điều này hoạt động trong Play 2.1.1.
On Windows
Tôi đang sử dụng các kịch bản sau đây để giết chơi máy chủ đang chạy
@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
)
Hoạt động tuyệt vời.Bạn có mẹo nào về việc khởi động các ứng dụng Play trên Windows không? Tại thời điểm này tôi đang sử dụng "chơi bắt đầu" mà là tốt nhưng tôi đang suy nghĩ về việc viết một kịch bản mà sẽ tự động khởi động ứng dụng sau khi máy chủ được khởi động lại.Kịch bản lý tưởng là để bọc ứng dụng lên trong một dịch vụ Windows nhưng, từ những gì tôi đã nhìn thấy, điều này không có vẻ đơn giản. – Ian
+1 - Điều này phù hợp với chúng tôi. Tôi đang sử dụng nó trong mỗi thư mục con cho cả môi trường thử nghiệm và dev của chúng tôi. – rishimaharaj
@Ian Một vài năm sau đó, nhưng đối với cộng đồng: thấy sự khác biệt giữa 'play run' và' play start' -> http://stackoverflow.com/a/16291499/1579667 – Benj
Để đạt được điều này, bạn có thể sửa đổi các tập tin 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")
}
Tuy nhiên, điều này chỉ áp dụng cho hệ thống * nix.
Bạn có thể chạy kịch bản này:
kill $(cat /your-play-project-path/target/universal/stage/RUNNING_PID)
Bạn có thể gọi <your_server_url>/@kill
, ví dụ : http://localhost:9022/app3/@kill
Thật khó chịu khi họ thay đổi rất nhiều ngữ nghĩa đơn giản này từ Play 1. 'start start' được sử dụng để có nghĩa là hoàn toàn khác biệt và sản xuất đã đạt được bằng các phương tiện hoàn toàn khác nhau. – ripper234
Vâng, nó hoàn toàn khác; bạn sẽ phải học lại (gần như) mọi thứ :-( –
'play run' chạy trong chế độ phát triển và nó được thiết kế để phát triển, chứ không phải sản xuất –