Giữ ứng dụng Java chạy khi đóng SSH trên Google Cloud


12

Hiện tại tôi đang chạy một ứng dụng Java bằng cách SSH vào máy ảo trên Google Cloud Compute. Tôi phát lệnh để chạy ứng dụng và nó tải giao diện điều khiển. Ngay khi tôi chấm dứt kết nối SSH, ứng dụng sẽ tắt. Tôi cho rằng điều này là do giao diện điều khiển đã bị đóng.

Tôi muốn ứng dụng này (là máy chủ) tồn tại sau khi tôi chấm dứt SSH, và tại bất kỳ thời điểm nào, tôi muốn có thể kết nối lại với bàn điều khiển và ra lệnh trên máy chủ.


Câu trả lời:


14

Bạn nói điều này:

Tôi muốn ứng dụng này (là máy chủ) tồn tại sau khi tôi chấm dứt SSH, và tại bất kỳ thời điểm nào, tôi muốn có thể kết nối lại với bàn điều khiển và ra lệnh trên máy chủ.

Hơi mơ hồ trong các mục tiêu, nhưng tôi sẽ đâm vào nó!

Để chạy bất kỳ lệnh nào dưới dạng quá trình nền trên máy chủ Linux, bạn nên thêm vào lệnh nohupvà nối &vào cuối.

Vì vậy, lệnh cuối cùng sẽ là:

nohup [your command] &

Lệnh này nohupcó nghĩa là bỏ qua các trò chơi treo máy, và các dấu và &nối với nó là một lệnh shell cho hệ thống chạy lệnh dưới dạng tiến trình nền. Thông tin thêm về việc sử dụng nó có thể được tìm thấy ở đây .

Khi bạn chạy một lệnh như thế này, quá trình sẽ chạy, bạn sẽ được gửi trở lại dấu nhắc lệnh và bạn có thể thoát phiên cuối hoặc thậm chí đi và làm một cái gì đó không liên quan đến lệnh đó trong phiên cuối đó.


1
Nếu tôi muốn quay lại quá trình và nhập lệnh vào bảng điều khiển java, tôi sẽ làm thế nào?
Noahb32

1
@ Noahb32 Vâng, điều này sẽ khởi chạy nó như là một quá trình nền; Tôi chủ yếu sử dụng phương pháp này để chỉ khởi động một quá trình và sau đó quên nó. Nếu bạn muốn bắt đầu một bảng điều khiển Java mới, bạn có thể làm điều đó vì bạn đã quay lại trình bao. Nhưng có lẽ bạn nên điều tra bằng cách sử dụng screenthay vì nó cho phép bạn quay lại phiên sau khi khởi chạy. Thành thật mà nói câu hỏi của bạn là một điều mơ hồ lớn vì vậy nếu bạn có thể làm rõ nó, điều đó có thể giúp làm sáng tỏ mọi thứ.
JakeGould

1
Cảm ơn bạn! Tôi muốn thêm rằng bạn có thể theo dõi đầu ra từ một thiết bị đầu cuối khác: chỉ cần chạy tail -f nohup.outtrong cùng một công việc. thư mục
naXa

3

Có ít nhất ba cách để làm điều này: nohup('không cúp máy'), screen/ tmux, hoặc disown. Có một chút không rõ ràng từ câu hỏi của bạn về nhu cầu kết nối với máy chủ và tương tác với daemon sau khi bạn ngắt kết nối.

Nếu đây là trường hợp nohupdisownsẽ không phù hợp khi bạn phát hành quy trình (mặc dù nó vẫn tiếp tục chạy). tmux(và cũng screen) sẽ giữ một thuật ngữ chạy ngay cả khi bạn.

Để biết thêm thông tin bạn có thể xem các trang tương ứng:

man nohup
man tux

Bash từ chối (giả sử bạn đang chạy Bash, mặc dù nhiều shell khác bao gồm một cái gì đó tương tự)


Có vẻ như không có disownlệnh nào trên Google Cloud, ít nhất là ví dụ tôi đang sử dụng, bắt đầu năm 2019 hoặc cuối năm 2018. nohupLệnh này hoạt động tốt, nhưng nó tạo ra một tệp bổ sung có thể không muốn.
phân ly

1

Để tách ứng dụng khỏi shell đang chạy, làm cho nó tồn tại sau khi thoát khỏi shell, sử dụng nohuplệnh.

Bạn chỉ cần tiền tố lệnh bình thường của bạn nohupvà nó sẽ hoạt động.


0

Ngoài ra nếu nohub không hoạt động, bạn có thể sử dụng màn hình :

 ssh into your remote box. 

gõ màn hình Sau đó bắt đầu quá trình bạn muốn.

Press Ctrl-A then Ctrl-D. 

Điều này sẽ tách phiên màn hình của bạn nhưng để các quy trình của bạn chạy. Bây giờ bạn có thể đăng xuất khỏi hộp từ xa.

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

của

quá trình của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.