Przenieś bieżące polecenie do odłączalnej sesji (tmux / screen)

41

Obecnie korzystam z kopii zapasowej i należy ją teraz przenieść na odłączalną, taką jak na tmuxlub screen. Czy można to zrobić, gdy polecenie jest obecnie uruchomione?

Mogę wysłać polecenie w tle, naciskając Ctrl+ Zi przywrócić je, wydając fgpolecenie. ale nie wiem, czy ta sesja może wrócić po wyjściu z terminala.

Jürgen Paul
źródło
1
Nie ma na to sposobu. Musisz uruchomić polecenie z sesji ekranowej (lub innej), aby można je było odłączyć.
Dan D.

Odpowiedzi:

45

Działa to przez większość czasu:

Wymagania wstępne: mieć reptyri tmux/ lub screenzainstalować; będziesz mógł je znaleźć za pomocą apt-getlub yum, w zależności od platformy.

  1. Użyj Ctrl+, Zaby zawiesić proces.

  2. Wznów proces w tle za pomocą bg

  3. Znajdź identyfikator procesu w tle za pomocą jobs -l

    Zobaczysz coś podobnego do tego:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Usuń zadanie z bieżącego rodzica (powłoki) za pomocą disown yourprocessname

  5. Rozpocznij tmux(preferowane) lub screen.

  6. Ponownie podłącz proces do tmux/ screensession z reptyr:

    reptyr 11475
    
  7. Teraz możesz odłączyć multiplekser (domyślnie Ctrl+ B, Dfor tmuxlub Ctrl+ A, Dfor screen) i odłączyć SSH, gdy proces będzie kontynuowany w tmux/ screen.

  8. Później, kiedy ponownie połączysz się z SSH, możesz podłączyć się do swojego multipleksera (np tmux attach.).

Ville
źródło
2
Niestety po uruchomieniu sudo reptyr 1430wciąż dostaję: „... [-] Nie można otworzyć tty u dziecka. Nie można dołączyć do pid 1430: Odmowa zezwolenia”
Daryl Spitzer
3
Możesz odnieść pewien sukces z opcją -L, np. Reptyr -L 1430 w twoim przypadku.
cgseller 21.04.16
1
Uruchom w razie potrzeby:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao
jest również na Archie za pośrednictwem yo: archlinux.org/packages/community/i686/reptyr (nie apt-get ani yum)
Tommy
1
Po bgtym proces powinien działać w tle, więc jobspowinieneś powiedzieć Runningraczej niż Stopped.
G-Man mówi „Przywróć Monikę”
2

reptyr jest dobry, ale dostałem błąd uprawnień

$ reptyr 30622

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

Potem znalazłem
-L Like '-l', but also redirect the child's stdio to the slave.

co działało jak urok

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
finanse fifi
źródło
2
Kiedy dodałem -L, dostałem wiadomość podobną do twojej, Opened a new pty: /dev/pts/6ale moja zawieszona topnie pojawiła się w tmuxie. czego tu brakuje?
Mehrad Mahmoudian
-1

możesz użyć disown, aby odłączyć zadanie od jego terminala, jeśli to polecenie jest dostępne.

bezpieczniej jest jednak uruchomić go bez użycia narzędzia nohup.

johnshen64
źródło
Czy możesz to rozwinąć? Co masz na myśli od tego nohup? Jak działa disowningproces?
Darth Android
disown odłącza proces w tle (który umieszczasz w tle za pomocą control-z) od terminala, więc proces będzie kontynuowany po odejściu terminala. możesz po prostu wpisać disown po control-z, jeśli polecenie zostanie znalezione. jest to jednak teoretycznie i może nie działać niezawodnie. następnym razem będzie bezpieczniej, dodając nohup z przodu programu, abyś mógł bezpiecznie opuścić terminal.
johnshen64
Jak już wspomniano, „odrzucenie” jest dość niewiarygodne. nohup nie jest naprawdę znacznie lepszy. reptyr może być jednak rozwiązaniem. github.com/nelhage/reptyr
anastrophe
To nie odpowiada na pytanie. Pytanie brzmi nie tylko „jak zamknąć terminal bez zabijania kopii zapasowej”, ale „jak mogę go wznowić później”. Na którą poprawną odpowiedzią jest „nie możesz”.
Gabe,
Widzę tutaj możliwe semantyczne spory i jest to dość popularny wynik wyszukiwania dla słów kluczowych takich jak „relokowalne”, „niezależne od pozycji”, „detach tmux” itp., Więc mam nadzieję, że możesz wybaczyć nekrologowi. Czy miałeś na myśli „nie możesz” z powodu różnych mapowań pamięci między zatrzymaniem programu a wznowieniem go? Program do tworzenia kopii zapasowych będzie wiedział tylko, jakie pliki wykonać dla kopii zapasowej na podstawie podanej struktury plików, a struktura plików istnieje, aby umożliwić mapowanie pamięci fizycznej w przyszłości. (Tworzymy kopie zapasowe z okazji, której nie ma!)
John P,