Chuyển lệnh hiện tại sang phiên có thể tháo rời (tmux / screen)


41

Tôi hiện đang chạy một bản sao lưu và bây giờ nó cần phải được chuyển sang một bản sao có thể tháo rời như trên tmuxhoặc screen. Có cách nào để làm điều này khi lệnh hiện đang chạy không?

Tôi có thể gửi lệnh nền bằng cách nhấn Ctrl+ Zvà đặt lại bằng cách phát fglệnh. nhưng tôi không biết liệu phiên đó có thể quay lại khi tôi thoát khỏi thiết bị đầu cuối không.


1
Không có cách nào để làm điều đó. Bạn phải bắt đầu lệnh từ trong một phiên (hoặc khác) để có thể tháo rời.
Dan D.

Câu trả lời:


45

Điều này hoạt động, hầu hết thời gian:

Điều kiện tiên quyết: có reptyrtmux/ screencài đặt; bạn sẽ có thể tìm thấy chúng với apt-gethoặc yum, tùy thuộc vào nền tảng của bạn.

  1. Sử dụng Ctrl+ Zđể tạm dừng quá trình.

  2. Tiếp tục quá trình trong nền với bg

  3. Tìm ID tiến trình của quá trình nền với jobs -l

    Bạn sẽ thấy một cái gì đó tương tự như thế này:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Không nhận công việc từ cha mẹ hiện tại (shell) với disown yourprocessname

  5. Bắt đầu tmux(ưu tiên), hoặc screen.

  6. Gắn lại quá trình vào tmux/ screensession với reptyr:

    reptyr 11475
    
  7. Bây giờ bạn có thể tách bộ ghép kênh (mặc định Ctrl+ B, Dcho tmuxhoặc Ctrl+ A, Dcho screen) và ngắt kết nối SSH trong khi quá trình của bạn tiếp tục trong tmux/ screen.

  8. Sau này khi bạn kết nối lại với SSH, bạn có thể đính kèm vào bộ ghép kênh của mình (ví dụ tmux attach).


2
Thật không may sau khi chạy sudo reptyr 1430tôi vẫn nhận được: "... [-] Không thể mở tty ở trẻ. Không thể đính kèm với pid 1430: Quyền bị từ chối"
Daryl Spitzer

3
Bạn có thể tìm thấy một số thành công với tùy chọn -L, ví dụ reptyr -L 1430 trong trường hợp của bạn.
Csseller

1
Chạy cái này khi cần thiết:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao

nó cũng có trên Arch thông qua yo: archlinux.org/packages/community/i686/reptyr (không phải apt-get hoặc yum)
Tommy

1
Sau đó bg, quá trình nên được chạy trong nền, vì vậy jobsnên nói Runningchứ không phải Stopped.
G-Man nói 'Phục hồi Monica'

2

reptyr là tốt nhưng tôi đã có một lỗi cho phép

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

Sau đó tìm thấy
-L Like '-l', but also redirect the child's stdio to the slave.

mà làm việc như một lá bùa

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
Khi tôi thêm vào, -Ltôi nhận được một tin nhắn như bạn nói Opened a new pty: /dev/pts/6nhưng tôi bị treo topkhông xuất hiện trong tmux. tôi đang thiếu gì ở đây
Mehrad Mahmoudian

-1

bạn có thể sử dụng từ chối để tách công việc khỏi thiết bị đầu cuối của nó, nếu lệnh đó có sẵn.

Mặc dù vậy, an toàn hơn là chạy nó với nohup để bắt đầu.


Bạn có thể mở rộng về điều này? Bạn có ý nghĩa gì khi bắt đầu với nó nohup? Làm thế nào để disowningmột quá trình làm việc?
Darth Android

disown tách quá trình nền (mà bạn đặt vào nền với control-z) từ thiết bị đầu cuối để quá trình sẽ tiếp tục sau khi thiết bị đầu cuối không còn nữa. bạn chỉ có thể gõ disown sau control-z, nếu lệnh được tìm thấy. tuy nhiên đây là trên lý thuyết và có thể không hoạt động đáng tin cậy. lần sau sẽ an toàn hơn bằng cách thêm nohup vào phía trước chương trình của bạn để bạn có thể thoát khỏi thiết bị đầu cuối một cách an toàn.
johnshen64

Tôi đã thấy "không thích" là không đáng tin cậy, như đã đề cập. nohup không thực sự tốt hơn nhiều. reptyr có thể là một giải pháp tuy nhiên. github.com/nelhage/reptyr
thảm họa

Điều này không trả lời câu hỏi. Câu hỏi không chỉ là "làm thế nào để tôi đóng thiết bị đầu cuối mà không làm chết bản sao lưu", đó là "làm thế nào để tôi tiếp tục lại sau". Câu trả lời đúng là "bạn không thể".
Gabe

Tôi thấy có thể có sự bất đồng về ngữ nghĩa ở đây và đây là kết quả tìm kiếm khá phổ biến cho các từ khóa như 'có thể di chuyển', 'độc lập với vị trí', 'tách rời tmux', v.v. vì vậy tôi hy vọng bạn có thể tha thứ cho bài đăng necro. Ý bạn là "bạn không thể" vì ánh xạ bộ nhớ khác nhau giữa việc dừng chương trình và tiếp tục chương trình? Một chương trình sao lưu sẽ chỉ biết các tập tin sao lưu theo cấu trúc tệp mà nó đưa ra và cấu trúc tệp tồn tại để làm cho bộ nhớ vật lý đó có thể ánh xạ trong tương lai. (Chúng tôi sao lưu nhân dịp mà nó không có!)
John P
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.