Có một `scp` chuyển gần khi tôi đóng vỏ không?


29

Tôi đã scpchuyển (từ một máy chủ từ xa sang một máy chủ khác), đó là khá lớn.

Vì vậy, có lẽ tôi muốn đóng máy tính mà tôi đã thực hiện lệnh này, điều này có kết thúc việc chuyển không? Tôi có sshquyền truy cập vào shell bằng chương trình Bitwise.

Câu trả lời:


34

Có một số giải pháp.

Bối cảnh & từ chối quá trình

  1. Mở thiết bị đầu cuối ssh đến máy chủ từ xa.
  2. Bắt đầu scpchuyển như bình thường.
  3. Bối cảnh quá trình scp ( Ctrl+ Z, sau đó là lệnh bg.)
  4. Bỏ quy trình nền ( disown).
  5. Kết thúc phiên ( exit) và quá trình sẽ tiếp tục chạy trên máy từ xa.

Một nhược điểm của phương pháp này là các bộ mô tả tệp cho thiết bị xuất chuẩn và thiết bị xuất chuẩn vẫn sẽ chứa các tham chiếu đến tty phiên ssh của bạn. Thiết bị đầu cuối có thể bị treo khi bạn cố gắng thoát vì điều này. Bạn có thể giải quyết vấn đề này bằng cách gõ ~.để buộc khách hàng ssh của bạn (chuỗi thoát đó phải theo một dòng mới ... xem thêm ~?). Nếu quá trình bạn đang từ bỏ ghi vào thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn, quá trình có thể thoát sớm nếu bộ đệm tty quá đầy.

Tạo một phiên màn hình và tách nó ra

GNU Screen có thể được sử dụng để tạo một phiên thiết bị đầu cuối từ xa, có thể tách rời và tiếp tục chạy trên máy chủ sau khi bạn đăng xuất khỏi phiên. Sau đó, bạn có thể đăng nhập lại vào máy chủ vào một ngày sau đó và gắn lại vào phiên.

  1. Đăng nhập vào máy chủ từ xa qua ssh.
  2. Bắt đầu một phiên màn hình , screen -D -R <session_name>.
  3. Bắt đầu scpchuyển như bình thường.
  4. Tách phiên màn hình bằng Ctrl+ Arồi d.
  5. Chấm dứt phiên ssh ( exit)

Để gắn lại vào phiên:

  1. Đăng nhập vào máy chủ từ xa qua ssh.
  2. Reattach đến phiên màn hình, screen -D -R <session_name>

Chạy lệnh mà không có Hangups

Xem câu trả lời bằng cách sử dụng nohup.

Sử dụng Trình lập lịch tác vụ

Đây là giải pháp tốt nhất nếu đây là một loại nhiệm vụ định kỳ mà bạn muốn tự động hóa.

Sử dụng crontab, athoặc batchđể lên lịch chuyển tiền.


Xin chào Damien, cảm ơn vì nhiều câu trả lời và định dạng. Nhưng tôi muốn một số rõ ràng về lý do tại sao bạn chỉ định các -D -Rcờ bắt đầu screen. Tôi đọc trang người đàn ông và nó không giúp tôi hiểu: -D -R Attach here and now. ...
hello_there_andy

@hello_there_andy Hướng dẫn nêu rõ -DR làm gì rõ ràng. Về cơ bản, nếu bạn có một phiên Màn hình đang chạy, nó sẽ gắn lại với nó thay vì tạo một phiên mới (ngay cả khi người dùng đã đăng nhập vào nó thông qua SSH - nó sẽ loại bỏ chúng, điều này rất hữu ích nếu người dùng bị treo đến một kết nối mạng xấu.)
Damien Ó Ceallaigh

1
Lưu ý rằng việc chỉ định tên phiên là tùy chọn.
Damien Ó Ceallaigh

Ok tôi nghĩ rằng tôi hiểu, nhưng tôi đoán tôi đã nghĩ (có thể sai) đó là những gì screen -r <session>đã làm ... vì vậy -DRnó khác với -rviệc nó có thể loại bỏ chúng? Không chỉ reattach và thất bại nếu người dùng khác ở trên đó.
xin chào_there_andy

Tôi đã làm một số thử nghiệm để chắc chắn. -D thực hiện những gì -d làm, ngoại trừ việc nó cũng sẽ đóng kết nối SSH (đăng xuất người dùng) ngoài việc tách ra bất kỳ phiên Màn hình hiện có nào. -r gắn lại phiên. -R kết nối lại một phiên hiện có, nhưng sẽ tạo một phiên mới nếu không tồn tại (-r sẽ thất bại nếu không có phiên nào để gắn lại.) Vì vậy, tôi hơi không chính xác trong mô tả trước đây.
Damien Ó Ceallaigh

10

Bạn có thể sử dụng nohup(1), tức là làm một cái gì đó như:

nohup scp alice@source:/the/answer/of/all bob@target.example.com:/var/tmp/42 &

Điều này sẽ tạo ra một đầu ra của nohup.out. Sau đó, bạn có thể đăng xuất một cách an toàn.


Các &cuối cùng đưa ra sự khác biệt đối với tôi! Cảm ơn!
winklerrr

6

Vâng, nó sẽ bị chấm dứt. Giải pháp để duy trì phiên thiết bị đầu cuối còn sống mà không cần kết nối là screenchương trình:

SCREEN(1)                                                            SCREEN(1)

NAME
       screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.host]]
       screen -r sessionowner/[[pid.]tty[.host]]

DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter‐
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.

2

Như đã nói ở trên, bạn có thể sử dụng lệnh màn hình, ví dụ:

  • Tạo màn hình

user@server:~$ screen -S bigscptransfer

  • Bạn đang ở trong màn hình

ser@server:~$ scp bigfile.dat server2:.

  • Tách khỏi màn hình bằng cách sử dụng CTRL+ Asau đó đẩyD

[detached from 5899.bigscptransfer]

  • Tiếp tục phiên khi bạn cần nó với:

user@server:~$ screen -r bigscptransfer


-1

nohup scp shinto @ source: / home / data roose@target.example.com: / var / tmp / file

dừng tạm thời lệnh với

CTRL + z

Đặt trên nền lệnh, gõ:

bg

yo có thể kiểm tra quá trình với:

việc làm

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.