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


208

Đô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 mà 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? Hiểu biết của tôi là 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.

Câu trả lời:


205

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

$ nohup long-running-process &
$ exit

20
Đây là nó. Không cần phải cài đặt màn hình hoặc tmux. Đây thực sự là cách tốt để làm điều đó. Chắc chắn 'màn hình' hoặc 'tmux' đều là những ứng dụng tuyệt vời và nên được sử dụng khi cần, nhưng đơn giản như chạy một quá trình trong nền mà bạn có thể đăng xuất, hãy tìm cách ở trên.
reiche

2
là nohup như disown?
cjac

28
Chúng có mục đích tương tự, nhưng chúng khác nhau theo nhiều cách. nohupchặn SIGHUP để khi cái vỏ chạy nó thoát ra và gửi SIGHUP cho tất cả những đứa trẻ vẫn đang chạy của nó, long-running-processkhông chết. disownchỉ cần xóa công việc đã chỉ định khỏi danh sách con của Bash, vì vậy nó sẽ không cố gửi SIGHUP. nohuplà một chương trình tách biệt với shell, vì vậy nó hoạt động với tất cả các shell, trong khi đó disownlà một dựng sẵn Bash. nohupchấp nhận lệnh để chạy, trong khi disownchỉ hoạt động sau khi công việc được bắt đầu và bạn đã chạy nền để bạn có thể quay lại trình bao.
Warren Young

3
Xem xét nhanh chóng tuyệt vời cho những ai không quen với nohup và không nhận - cũng như một số cách dễ dàng để đối phó với thiết bị đầu cuối phiên serverwatch.com/tutorials/article.php/3935306/...
Dan

7
tail -f nohup.outđể kiểm tra những gì đang xảy ra khi bạn quay lại.
Ricardo Stuven

141

Bạn muốn sử dụng GNU Screen. Nó là siêu tuyệt vời!

ssh me@myserver.com
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 me@myserver.com
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!

screenlà 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 vỏ 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.

8
tmux là một tương tự hiện đại của màn hình.
zvolkov

Tôi không biết về tiền tố khóa hiện đại, nhưng mặc định của tmux (Ctrl + b) sẽ giúp ích nếu bạn sử dụng để bash / emacs.
sajith

2
màn hình khá tuyệt nếu bạn muốn một thiết bị đầu cuối dùng chung vì một số lý do. Tạo một màn hình screen -S namevà để người bạn khác của bạn kết nối với nó screen -x name.
Patrick

1
tmuxvới tmuxinatorlà một sự kết hợp tuyệt vời cho các thiết lập ưa thích, trong khi tôi thích screenlà một giải pháp nhanh chóng và đơn giản.
earthmeLon

Câu trả lời này là tốt nhất .. Tôi thích nó. Nghiên cứu xuất sắc
Jaffer Wilson

42

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ứ điều gì công việc # đang theo sau %). Điều này sẽ tiếp tục processNametrong nền.

  3. Không thừa nhận processName với disown %1hoặc disown PID. Sử dụng -hcờ nếu bạn muốn duy trì quyền sở hữu cho đến khi bạn chấm dứt hệ vỏ hiện tại của mình.


5
Cảm ơn vì điều đó! Tôi đã có một công việc đang chạy và nghĩ rằng tôi sẽ không thể tiếp tục vì tôi đã không sử dụng &khi tôi bắt đầu nó. Điều này dường như làm việc tuyệt vời!
Matt

4
Thật đáng kinh ngạc! Tôi chưa bao giờ biết Linux có thể cho phép bạn chuyển quyền kiểm soát các quy trình hoạt động như thế này. Tôi sợ pin của mình sẽ chết trong khi SSH vào máy chủ của mình giữa quá trình chạy dài và đây là câu trả lời cho tôi!
Sao Diêm Vương

14

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. Một hướng dẫncác trang trợ giúp có sẵn.

byobu 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ể duy trì 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.


Tôi đã khởi chạy một quy trình trên máy chủ của mình trong Byobu Terminal mà không thực sự biết nó là gì (Tôi chỉ tìm kiếm Terminal và nhấp vào Byobu vì tôi chưa bao giờ thấy nó trước đây). Tôi tiếp tục sử dụng Byobu vì nó có một thanh trạng thái đầy màu sắc ở phía dưới và tôi nghĩ nó thật tuyệt. Hôm nay tôi thấy mình muốn truy cập phiên cuối đó từ xa thông qua SSH. Tất cả những gì tôi phải làm là gõ "byobu" và nó cho thấy phiên cuối cùng ngay lập tức. Thật hạnh phúc khi tôi tình cờ gặp Byobu!
nick

8

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

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

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

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


3

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àn giao tiếp 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 vỏ 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) ( ctrl+blà "ok google" của tmux và dlà lệnh đóng không thoát ra khỏi vỏ). Đ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 một lần nữa, bạn có thể mở tmux với 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+bvà sau đó nhấn ". Để thay đổi từ khung này sang khung khác, ctrl+brồi nhấn mũi tên lên / xuống.


3

Bạn có thể tìm thấy một hướng dẫn tốt ở đây: Giữ cho 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 dấu nhắc bình thường.

Để ngắt kết nối (nhưng để phiên chạy) Hit Ctrl+ Avà sau đó Ctrl+ Dliên tiếp. Bạn sẽ thấy thông báo [tách ra]

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

screen -r

Để kết nối lại với một 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 Hit Ctrl+ Avà sau đó Cliên tiếp. Bạn sẽ thấy một dấu nhắc mới.

Để chuyển từ cửa sổ màn hình này sang Hit Ctrl+ khác Avà sau đó Ctrl+ Aliên tiếp.

Để liệt kê các cửa sổ màn hình mở Hit Ctrl+ Avà sau đó Wliên tiếp


Bạn có thể sử dụng <kbd>Ctrl</kbd>để hiển thị tên dưới dạng phím bàn phím.
Tomasz

1

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 của mình (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 gắn vào máy tính xách tay Windows của tôi từ Linux.

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.