2013-02-25 21 views

Trả lời

12

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.

+1

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

+1

Vâng, nó hoàn toàn khác; bạn sẽ phải học lại (gần như) mọi thứ :-( –

+0

'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 –

0

Chỉ cần nhấn Ctrl + D trong cửa sổ bảng điều khiển.

+0

Điều đó tồn tại trên bảng điều khiển nhưng quá trình vẫn tiếp tục. – ripper234

+1

Đúng, bạn nói đúng. Tôi luôn luôn sử dụng chơi chạy trong phát triển và CTRL + D hoạt động tốt. Trong sản xuất, bạn sẽ cần phải giết quá trình. – disperse

8

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.

16

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 
) 
+1

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

+0

+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

+0

@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

0

Để đạ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.

9

Bạn có thể chạy kịch bản này:

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

Bạn có thể gọi <your_server_url>/@kill, ví dụ : http://localhost:9022/app3/@kill

Các vấn đề liên quan