it-swarm-vi.com

Giữ các tiến trình chạy sau khi ngắt kết nối phiên SSH

Đôi khi tôi có các quy trình chạy dài mà tôi muốn khởi động trước khi về nhà, vì vậy tôi tạo một phiên SSH đến máy chủ để bắt đầu quá trình, nhưng sau đó tôi muốn đóng máy tính xách tay của mình và về nhà và sau đó, sau bữa tối, tôi muốn kiểm tra quá trình tôi bắt đầu trước khi nghỉ việc Làm thế nào tôi có thể làm điều đó với SSH? Tôi hiểu rằng nếu bạn phá vỡ kết nối SSH, bạn cũng sẽ phá vỡ phiên đăng nhập của mình trên máy chủ, do đó sẽ giết quá trình chạy dài.

216
λ Jonas Gorauskas

Sử dụng Nohup để làm cho quy trình của bạn bỏ qua tín hiệu gác máy:

$ Nohup long-running-process &
$ exit
217
Warren Young

Bạn muốn sử dụng GNU Màn hình. Thật tuyệt vời!

ssh [email protected]
screen               #start a screen session
run-a-long-process

CTRL+a , d để tách khỏi phiên màn hình của bạn

exit                 #disconnect from the server, while run-a-long-process continues

Khi bạn quay lại máy tính xách tay của bạn:

ssh [email protected]
screen -r            #resume the screen session

Sau đó kiểm tra tiến trình của quá trình dài hạn của bạn!

screen là một công cụ rất toàn diện và có thể làm được nhiều hơn những gì tôi đã mô tả. Trong khi ở phiên màn hình, hãy thử ctrl + a,? để tìm hiểu một vài lệnh phổ biến. Có lẽ phổ biến nhất là:

  • CTRL+a , c để tạo một cửa sổ mới
  • CTRL+a , n để chuyển sang cửa sổ tiếp theo trong phiên màn hình của bạn
  • CTRL+a , p để chuyển sang cửa sổ trước trong phiên màn hình của bạn
  • nếu bạn đăng nhập từ một loạt các hệ thống khác nhau, bạn có thể đã vô tình để mình bị gắn vào một phiên màn hình hoạt động trên một máy tính khác. Vì lý do đó, tôi luôn tiếp tục với screen -d -r để đảm bảo rằng nếu một Shell khác được gắn vào phiên màn hình của tôi, nó sẽ bị tách ra trước khi tôi tiếp tục nó trên hệ thống hiện tại của mình.
143
Sandy

Nếu bạn chưa lên kế hoạch trước và thiết lập screen, v.v. chỉ cần làm như sau:

  1. Nếu quy trình của bạn đang chạy trong nền: goto # 3, khác: Ctrl-Z để tạm dừng quá trình tiền cảnh. Điều này sẽ báo cáo công việc # của quy trình bị đình chỉ, ví dụ:

    [1]+  Stopped                 processName
    
  2. Gửi processName đến nền với bg %1 (sử dụng bất cứ công việc nào # đang theo %). Điều này sẽ tiếp tục processName trong nền.

  3. Từ chốiprocessName với disown %1 hoặc là disown PID. Sử dụng -h gắn cờ nếu bạn muốn duy trì quyền sở hữu cho đến khi bạn chấm dứt Shell hiện tại của mình.

42
Mike Covington

Những gì bạn muốn sử dụng là màn hình hoặc thậm chí tốt hơn là một trình bao bọc thân thiện với người dùng xung quanh màn hình được gọi là byobu.

Màn hình cho phép bạn chạy nhiều phiên thiết bị đầu cuối ảo trong cùng một phiên ssh. A hướng dẫntrang trợ giúp có sẵn.

byob là một trình bao bọc cho phép dễ dàng mở các màn hình mới bằng một phím chức năng đơn giản thay vì tổ hợp phím từ ctrl-a. Nó cũng hiển thị một dòng trạng thái với tất cả các thiết bị đầu cuối ảo mở có thể được đặt tên.

Một tính năng hay khác là tất cả màn hình của bạn có thể ở lại trong khi kết nối ssh của bạn bị ngắt kết nối. Bạn chỉ cần kết nối lại thông qua ssh và gọi byobu và mọi thứ vẫn như trước.

Cuối cùng một số ảnh chụp màn hình của byobu.

15
txwikinger

Có thể đáng chú ý rằng

ssh -t lala screen -rxU moo sẽ đính kèm vào phiên moo trên Máy chủ lala

ssh -t lala screen -S moo sẽ tạo phiên moo trên Máy chủ lala

ssh -t lala screen -S moo quux sẽ tạo phiên moo trên Máy chủ lala và chạy chương trình quux, thoát phiên khi hoàn thành.

9
cjac

Bạn có thể tìm thấy một hướng dẫn tốt ở đây: Giữ phiên SSH của bạn chạy khi bạn ngắt kết nối

Sudo apt-get install screen

Bây giờ bạn có thể bắt đầu một phiên màn hình mới bằng cách chỉ cần gõ màn hình vào dòng lệnh. Bạn sẽ được hiển thị một số thông tin về màn hình. Nhấn enter và bạn sẽ ở một Prompt bình thường.

Để ngắt kết nối (nhưng để phiên chạy) Lượt Ctrl + A và sau đó Ctrl + D liên tiếp ngay lập tức. Bạn sẽ thấy thông báo [tách ra]

Để kết nối lại với phiên đã chạy

screen -r

Để kết nối lại với phiên hiện có hoặc tạo một phiên mới nếu không tồn tại

screen -D -r

Để tạo một cửa sổ mới bên trong phiên màn hình đang chạy Lượt Ctrl + A và sau đó C liên tiếp ngay lập tức. Bạn sẽ thấy một Nhắc mới.

Để chuyển từ cửa sổ màn hình này sang cửa sổ khác Lượt Ctrl + A và sau đó Ctrl + A liên tiếp ngay lập tức.

Để liệt kê các cửa sổ màn hình đang mở Lượt Ctrl + A và sau đó W ngay lập tức

4
Victor Hugo Arango A.

Câu hỏi cũ, lạ vẫn không ai khuyên tmux , hoạt động như một trình bao bọc cho n bảng điều khiển và giữ cho chúng mở cho đến khi cần. Điều này cho phép kiểm soát nhiều hơn, bên cạnh một số chức năng mà tmux có. Thật dễ dàng để quản lý nó, bạn chỉ cần thực hiện tmux, nó mang lại cho bạn trong Shell của nó, bắt đầu công việc looong của bạn, sau đó nhấn ctrl + b theo sau là d (tách ra) (ctrl+b là "ok google" của tmux và d là lệnh đóng mà không thoát khỏi Shell). Điều này thực sự hoạt động nếu bạn chỉ đóng, ví dụ, PuTTY. Sau bữa tối, khi bạn kết nối lại, bạn có thể mở lại tmux bằng tmux attach để xem màn hình của bạn chính xác như bạn rời đi. Một cái gì đó tôi yêu là chia tách khung: ctrl+b và sau đó nhấn ". Để thay đổi từ khung này sang khung khác, ctrl+b và sau đó nhấn mũi tên lên/xuống.

4
nnsense

Tôi sử dụng NX NoMachine, miễn phí cho tôi vì chỉ có tôi. Về cơ bản, nó chạy một phiên X trên máy chủ mà bạn có thể kết nối và ngắt kết nối liên tục. Phiên X tiếp tục chạy khi bạn không kết nối. Kết nối có thể được thực hiện từ bất cứ đâu. Bạn có thể chọn giữa các cửa sổ nổi hoặc một cửa sổ duy nhất chứa toàn bộ máy tính để bàn (ví dụ: máy tính để bàn Gnome hoàn chỉnh). Máy khách (mà bạn sẽ chạy trên máy tính xách tay của bạn) có thể chạy trên Linux, MacOS, Solaris hoặc Microsoft Windows. Trong trường hợp sau, nếu bạn chọn các cửa sổ nổi, chúng sẽ xuất hiện riêng lẻ trên Thanh tác vụ Windows.

Tôi sử dụng máy tính xách tay Windows XP (mà tôi cần cho một số phần cứng dành riêng cho Windows mà tôi có) làm mặt trước cho hai máy chủ Linux của mình bằng NX Nadderine. Tôi thậm chí có thể in ra máy in được đính kèm máy tính xách tay Windows của tôi từ Linux.

2
Rob_before_edits

Tmux là một tùy chọn tốt có sẵn để chạy các quy trình chạy dài của bạn trong nền.

Tôi phải tiếp tục chạy các quy trình chạy dài trên nền tảng đám mây của google VM dụ/máy chủ (với HĐH: Ubuntu 16.0). Tôi phải khởi động thiết bị đầu cuối SSH và từ thiết bị đầu cuối, tôi có để giữ cho thiết bị đầu cuối được kết nối để chạy quy trình. Bây giờ, tất cả đều tốt. Nhưng hãy đợi nếu kết nối với thiết bị đầu cuối SSH của tôi bị chấm dứt thì các quy trình chạy dài sẽ dừng ngay lập tức và do đó tôi phải chạy lại chúng một lần nữa thiết bị đầu cuối ssh được khởi động lại hoặc từ thiết bị đầu cuối ssh mới.

Tôi thấy tmux là giải pháp tốt để tránh chấm dứt các quy trình mà chúng tôi muốn chạy ngay cả sau khi thiết bị đầu cuối bị đóng.

Bộ ghép kênh đầu cuối (tmux) để bắt đầu phiên tmux:

  1. Bắt đầu thiết bị đầu cuối ssh
  2. Nhập tmux. Nó sẽ mở một cửa sổ trong cùng một thiết bị đầu cuối.
  3. Chạy lệnh để bắt đầu các quá trình chạy dài trong phiên tmux.

Bây giờ ngay cả khi thiết bị đầu cuối SSH bị đóng/kết thúc đột ngột, phiên tmux sẽ tiếp tục chạy các quy trình chạy đơn lẻ bắt đầu trên cá thể/máy chủ.

Nếu kết nối bị ngắt thì làm thế nào để kết nối lại để xem các tiến trình đang chạy trong phiên tmux trong nền:

  1. kết nối lại hoặc mở thiết bị đầu cuối ssh mới. Để xem quá trình này (được tiếp tục chạy trong nền), gõ: tmux attach chỉ huy.

Muốn chấm dứt phiên tmux:

  1. Dừng quá trình. Sau đó nhập exit trong cửa sổ tmux-terminal.

(Lưu ý rằng: Nếu chúng ta sử dụng tmux detach lệnh: nó sẽ thoát khỏi cửa sổ/thiết bị đầu cuối phiên tmux mà không kết thúc/dừng các phiên tmux)

Để biết thêm chi tiết xin vui lòng tham khảo bài viết sau:

  1. https://www.tecmint.com/keep-remote-ssh-simes-rucky-after-disconnection/
  2. https://limitlessdatascience.wordpress.com/2019/08/22/tmux-to-keep-jupyter-notebook-ricky-in-the-background/
1
Yogesh