Điều gì xảy ra với một hoạt động tiếp tục nếu chúng ta làm ssh và sau đó ngắt kết nối?


10

Tôi đang di chuyển một thư mục này sang thư mục khác bằng lệnh mv.

Tuy nhiên, tôi đã buộc phải tắt máy tính của mình, điều đó có nghĩa là mất kết nối với máy chủ.

Điều gì xảy ra với lệnh mv?

Lưu ý: Sau khi tôi đăng nhập lại, tôi thấy rằng tất cả các tệp đã được di chuyển đúng mặc dù tôi chắc chắn rằng nó không bị di chuyển khi tôi đóng kết nối. Có vẻ như mv đã tiếp tục chạy.

Đây là tôi ssh để máy centosh trong máy chủ đám mây kiên định.


Tôi đoán, Nó sẽ đưa ra một lỗi về sự không có sẵn của nguồn / đích
SHW

1
di chuyển một thư mục sang thư mục khác là "tức thời" nếu chúng nằm trên cùng một phân vùng. Và ngay cả khi bạn di chuyển tệp trên mỗi tệp, nó có thể nhanh. Bạn có chắc chắn rằng nó vẫn tiếp tục sau khi bạn ngắt kết nối (thay vì kết thúc trong khi các tín hiệu SIGHUP khác nhau được gửi đến các tiến trình con, có thể mất một thời gian [ở quy mô máy tính].
Olivier Dulac

như một cách giải quyết, sử dụng screenhoặc tmuxmột lần đăng nhập để khởi động một thiết bị đầu cuối ảo sẽ tiếp tục hoạt động khi bạn ngắt kết nối [nghĩa là sau đó bạn có thể gắn lại vào thiết bị đó và xem thiết bị đầu cuối ở trạng thái giống như bạn rời khỏi nó, cộng với mọi cập nhật trong giữa]
Olivier Dulac

Câu trả lời:


19

Nếu mvđược bắt đầu như:

ssh host mv x y

Sau đó mvsẽ nhận được SIGPIPE (và chết) nếu nó cố gắng viết bất cứ điều gì vào thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn (như thông báo lỗi).

Nếu bạn bắt đầu một phiên tương tác như:

ssh host

Và bắt đầu mvtừ lớp vỏ tương tác trong đó, khi phía chính của thiết bị đầu cuối giả bắt đầu sshdsẽ bị đóng (khi sshđóng kết nối TCP khi thoát), người lãnh đạo phiên liên kết với phía nô lệ của thiết bị đầu cuối giả, rằng là vỏ tương tác từ xa, sẽ nhận được tín hiệu SIGHUP (gác máy).

Khi nhận được tín hiệu đó, các shell (trừ khi bạn phát ra a trap '' HUP) thường chuyển tiếp tín hiệu đó đến tất cả các quy trình trong công việc mà chúng đã bắt đầu, trừ khi bạn nói rõ ràng là không (như với disownhoặc với &|một số shell).

Các quy trình khác (như mv) thường sẽ chết khi nhận được tín hiệu đó trừ khi chúng được yêu cầu bỏ qua nó (bằng cách sử dụng nohuphoặc nếu cha mẹ của chúng bỏ qua nó).

Nếu bạn đã ban hành một:

trap '' HUP

Sau đó, tất cả các công việc bắt đầu sau khi nó sẽ kế thừa nó và sẽ bỏ qua SIGHUP.

Shell sẽ không chết vì tín hiệu SIGHUP được gửi khi ngắt kết nối nhưng sẽ thoát ở dấu nhắc tiếp theo, vì stdin của nó không còn nữa. Khi thoát ra, một số shell gửi SIGHUP đến các công việc (không bị từ chối) của chúng. Những người bắt đầu sau khi trap '' HUPsẽ bỏ qua nó, những người khác sẽ chết.

Nói tóm lại, trong trường hợp đó, trừ khi bạn thực hiện các biện pháp phòng ngừa trước để nó không xảy ra, bạn mvsẽ chết.

Để tránh lần sau, nếu sử dụng tcsh, zshhoặc bash, trước khi tắt máy, nhấn Ctrl-Zđể tạm dừng mv, nhập bgđể tiếp tục ở chế độ nền và disownđể từ chối .

Hoặc bạn có thể sử dụng screenhoặc tmux. Khi có SIGHUP, những ứng dụng đó sẽ tách ra khỏi thiết bị đầu cuối máy chủ hiện tại của chúng, nhưng các ứng dụng đang chạy trong thiết bị đầu cuối mà nó mô phỏng sẽ tiếp tục chạy không đầu và bạn có thể gắn lại phiên này sang thiết bị đầu cuối khác để xem cách thức hoạt động mv.

Hoặc sử dụng nohup mvđể làm cho mvmiễn dịch với SIGHUP và có đầu ra và lỗi của nó đi đến một nohup.outtệp mà bạn có thể kiểm tra sau.

Bây giờ, tôi không biết về nhà cung cấp dịch vụ lưu trữ cụ thể của bạn, nhưng với một số người, khi bạn sshvào ví dụ, bạn không bắt đầu một phiên shell ở đó mà chỉ gắn vào bảng điều khiển, đó là phiên đã được bắt đầu và khi bạn thoát, bạn không chấm dứt phiên đó, chỉ tách ra khỏi phiên đó. Vì vậy, cái vỏ không bị giết, cũng không mv. Nếu đó là trường hợp, bạn sẽ nhận thấy rằng pschạy từ đó sẽ cung cấp cho bạn giống nhau pidcho vỏ của bạn qua hai sshphiên riêng biệt .


Vì vậy, bạn đang nói rằng mv sẽ bị chấm dứt. Vâng, xin vui lòng kiểm tra ghi chú.
dùng4951

2
+1. câu trả lời nổi bật (vì nó đi sâu vào chi tiết để giải thích những gì xảy ra và khi nào).
Olivier Dulac

Tôi đã biên soạn một bài viết dựa trên câu trả lời của bạn . Hy vọng, ai đó sẽ tìm thấy nó hữu ích.
x-yuri
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.