Übertragen Sie den aktuellen Befehl in eine entfernbare Sitzung (tmux / screen)


41

Ich führe gerade ein Backup durch und es muss nun auf ein abnehmbares wie auf tmuxoder übertragen werden screen. Gibt es eine Möglichkeit, dies zu tun, wenn der Befehl gerade ausgeführt wird?

Ich kann dem Befehl den Hintergrund senden, indem ich Ctrl+ drücke, Zund ihn durch Ausgeben eines fgBefehls wiederherstellen. aber ich weiß nicht, ob diese Sitzung zurückgehen kann, wenn ich das Terminal verlasse.


1
Es gibt keine Möglichkeit, das zu tun. Sie müssen den Befehl in einer Bildschirmsitzung (oder einer anderen Sitzung) starten, damit er abnehmbar ist.
Dan D.

Antworten:


45

Das funktioniert meistens:

Voraussetzungen: haben reptyrund tmux/ oder screeninstalliert; Sie können sie mit apt-getoder finden yum, abhängig von Ihrer Plattform.

  1. Verwenden Sie Ctrl+ Z, um den Vorgang anzuhalten.

  2. Setzen Sie den Vorgang im Hintergrund mit fort bg

  3. Suchen Sie mit die Prozess-ID des Hintergrundprozesses jobs -l

    Sie werden etwas Ähnliches sehen:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. Den Job vom aktuellen Elternteil (Shell) mit abweisen disown yourprocessname

  5. Start tmux(bevorzugt) oder screen.

  6. Verbinden Sie den Prozess mit reptyr erneut mit tmux/ screensession:

    reptyr 11475
    
  7. Jetzt können Sie den Multiplexer trennen (Standard Ctrl+ B, Dfür tmuxoder Ctrl+ A, Dfür screen) und SSH trennen, während Ihr Prozess in tmux/ fortgesetzt wird screen.

  8. Wenn Sie sich später erneut mit SSH verbinden, können Sie eine Verbindung zu Ihrem Multiplexer herstellen (z tmux attach. B. ).


2
Leider sudo reptyr 1430bekam ich nach dem Laufen immer noch: "... [-] Kann das tty im Kind nicht öffnen. Kann nicht an PID 1430 anhängen: Erlaubnis verweigert"
Daryl Spitzer

3
Mit der Option -L können Sie möglicherweise einige Erfolge erzielen, z. B. reptyr -L 1430 in Ihrem Fall.
Cgseller

1
Führen Sie dies bei Bedarf aus:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao

es ist auch auf Arch via yo: archlinux.org/packages/community/i686/reptyr (nicht apt-get oder yum)
Tommy

1
Danach bgsollte der Prozess im Hintergrund laufen , jobsalso Runningeher als Stopped.
G-Man sagt, dass Monica

2

reptyr ist gut, aber ich habe einen Berechtigungsfehler

$ reptyr 30622

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

Dann gefunden
-L Like '-l', but also redirect the child's stdio to the slave.

Das hat wie ein Zauber gewirkt

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

2
Als ich das hinzufügte, -Lbekam ich eine Nachricht wie deine, Opened a new pty: /dev/pts/6aber meine Suspendierung toperschien nicht im tmux. was vermisse ich hier
Mehrad Mahmoudian

-1

Sie können disown verwenden, um den Job von seinem Terminal zu trennen, wenn dieser Befehl verfügbar ist.

es ist jedoch sicherer, es mit nohup zu starten.


Können Sie das näher erläutern? Was meinst du damit anzufangen nohup? Wie funktioniert disowningein Prozess?
Darth Android

disown trennt den Hintergrundprozess (den Sie mit control-z in den Hintergrund gestellt haben) vom Terminal, sodass der Prozess fortgesetzt wird, nachdem das Terminal nicht mehr vorhanden ist. Sie können einfach disown nach control-z eingeben, wenn der Befehl gefunden wird. Dies ist jedoch theoretisch und funktioniert möglicherweise nicht zuverlässig. Das nächste Mal ist es sicherer, nohup vor Ihrem Programm hinzuzufügen, damit Sie das Terminal sicher verlassen können.
Johnshen64

Ich habe festgestellt, dass 'disown', wie erwähnt, ziemlich unzuverlässig ist. nohup ist nicht wirklich viel besser. Reptyr könnte jedoch eine Lösung sein. github.com/nelhage/reptyr
anastrophe

Dies beantwortet die Frage nicht. Die Frage ist nicht nur, wie ich das Terminal schließe, ohne das Backup zu beenden, sondern wie ich es später fortsetze. Auf die die richtige Antwort lautet "Sie können nicht".
Gabe

Ich sehe hier eine mögliche semantische Meinungsverschiedenheit, und dies ist ein ziemlich beliebtes Suchergebnis für Keywords wie 'relocatable', 'position independent', 'detach tmux' usw., also hoffe ich, dass Sie dem Necro-Post verzeihen können. Meinten Sie "Sie können nicht", weil zwischen dem Beenden und dem Fortsetzen des Programms unterschiedliche Speicherzuordnungen bestehen? Ein Sicherungsprogramm wird nur anhand der angegebenen Dateistruktur wissen, welche Dateien gesichert werden sollen, und die Dateistruktur ist vorhanden, damit dieser physische Speicher in Zukunft zugeordnet werden kann. (Wir sichern für die Gelegenheit, dass es nicht!)
John P
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.