Schließt ein "scp" -Transfer, wenn ich die Shell schließe?
29
Ich habe eine scpÜbertragung (von einem Remote-Server zu einem anderen), das ist ziemlich groß.
Vielleicht möchte ich den Computer schließen, von dem aus ich diesen Befehl ausgeführt habe. Beendet dies die Übertragung? Ich habe sshZugriff auf die Shell mit dem Programm Bitwise.
Öffnen Sie das ssh-Terminal für den Remote-Server.
Beginnen Sie den scpTransfer wie gewohnt.
Hintergrund den SCP-Prozess ( Ctrl+ Z, dann den Befehl bg.)
Den Hintergrundprozess ablehnen ( disown).
Beenden Sie die Sitzung ( exit) und der Prozess wird auf dem Remote-Computer weiter ausgeführt.
Ein Nachteil dieses Ansatzes ist, dass die Dateideskriptoren für stdout und stderr weiterhin Verweise auf die tty Ihrer ssh-Sitzung enthalten. Das Terminal hängt möglicherweise, wenn Sie versuchen, aus diesem Grund zu beenden. Sie können dies umgehen ~., indem Sie Folgendes eingeben , um das Schließen Ihres ssh-Clients zu erzwingen (diese Escape-Sequenz muss einer neuen Zeile folgen ... siehe auch ~?). Wenn der Prozess, den Sie verlassen, in stdout oder stderr schreibt, wird der Prozess möglicherweise vorzeitig beendet, wenn der tty-Puffer überfüllt ist.
Erstellen Sie eine Bildschirmsitzung und trennen Sie sie
GNU Screen kann verwendet werden, um eine Remote-Terminal-Sitzung zu erstellen, die getrennt werden kann und auf dem Server weiter ausgeführt werden kann, nachdem Sie sich von der Sitzung abgemeldet haben. Sie können sich dann zu einem späteren Zeitpunkt wieder beim Server anmelden und eine neue Verbindung zur Sitzung herstellen.
Melden Sie sich über ssh beim Remote-Server an.
Starten Sie eine Bildschirmsitzung screen -D -R <session_name>.
Beginnen Sie den scpTransfer wie gewohnt.
Trennen Sie die Bildschirmsitzung mit Ctrl+ und Adann d.
Beende die ssh Session ( exit)
So fügen Sie die Sitzung erneut hinzu:
Melden Sie sich über ssh beim Remote-Server an.
Verbinden Sie sich wieder mit der Bildschirmsitzung, screen -D -R <session_name>
Hallo Damien, danke für die nette Auswahl an Antworten und Formatierungen. Aber ich wollte etwas Klarheit darüber, warum Sie die -D -Rstartenden Flags angegeben haben screen. Ich habe die Manpage gelesen und es hat mir nicht geholfen zu verstehen: -D -R Attach here and now. ...
hello_there_andy
@hello_there_andy Das Handbuch gibt deutlich an, was -DR macht. Wenn bereits eine Screen-Sitzung ausgeführt wird, wird sie erneut angefügt, anstatt eine neue Sitzung zu erstellen (auch wenn ein Benutzer über SSH angemeldet ist - sie wird herausgeschmissen, was nützlich ist, wenn der Benutzer aufgrund von Problemen hängt zu einer schlechten Netzwerkverbindung.)
Damien Ó Ceallaigh
1
Beachten Sie, dass die Angabe eines Sitzungsnamens optional ist.
Damien Ó Ceallaigh
Ok, ich glaube, ich verstehe, aber ich glaube, ich dachte (vielleicht falsch), das hat was gebracht screen -r <session>... also -DRist das anders als nur -rdarin, dass es sie rausschmeißen kann? Nicht nur neu anfügen und fehlschlagen, wenn ein anderer Benutzer daran beteiligt ist.
Hallo_Hier_undy
Ich habe einige Tests durchgeführt, um sicherzugehen. -D macht das, was -d macht, außer dass es auch die SSH-Verbindung schließt (den Benutzer abmeldet) und nur vorhandene Bildschirmsitzungen trennt. -r Hängt die Sitzung erneut an. -R fügt eine vorhandene Sitzung erneut hinzu, erstellt jedoch eine neue Sitzung, wenn keine vorhanden ist (-r schlägt fehl, wenn keine Sitzung zum erneuten Anfügen vorhanden ist.) Daher war ich in meiner vorherigen Beschreibung etwas ungenau.
Das &am Ende hat für mich den Unterschied gemacht! Vielen Dank!
Winklerrr
6
Ja, es wird beendet. Die Lösung, um die Terminalsitzung ohne Konnektivität am Leben zu erhalten, ist das screenProgramm:
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.
-D -R
startenden Flags angegeben habenscreen
. Ich habe die Manpage gelesen und es hat mir nicht geholfen zu verstehen:-D -R Attach here and now. ...
screen -r <session>
... also-DR
ist das anders als nur-r
darin, dass es sie rausschmeißen kann? Nicht nur neu anfügen und fehlschlagen, wenn ein anderer Benutzer daran beteiligt ist.Sie könnten zB
nohup(1)
Folgendes tun:Dies erzeugt eine Ausgabe von
nohup.out
. Dann können Sie sich sicher abmelden.quelle
&
am Ende hat für mich den Unterschied gemacht! Vielen Dank!Ja, es wird beendet. Die Lösung, um die Terminalsitzung ohne Konnektivität am Leben zu erhalten, ist das
screen
Programm:quelle
Wie oben erwähnt, können Sie den Befehl screen verwenden, zum Beispiel:
user@server:~$ screen -S bigscptransfer
ser@server:~$ scp bigfile.dat server2:.
[detached from 5899.bigscptransfer]
user@server:~$ screen -r bigscptransfer
quelle
nohup scp shinto @ source: / home / data [email protected]: / var / tmp / file
stoppe vorübergehend den befehl mit
Setzen Sie den Befehl in den Hintergrund und geben Sie Folgendes ein:
Sie können den Prozess überprüfen mit:
quelle