Ich habe dies auch rsync
in der Vergangenheit erlebt. Die Lösung, die das Problem für mich behoben hat, bestand darin, es innerhalb einer screen
Sitzung auszuführen, wodurch die Verbindung zum Remote-Server aufrechterhalten werden konnte.
screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session
Sie können den Status überprüfen, indem Sie ausführen screen -x rsync
(oder was auch immer Sie die Sitzung benennen möchten, wenn Sie ihr einen Namen geben, der nicht erforderlich ist). Dadurch wird Ihre aktuelle Shell erneut an diese Sitzung angehängt. Denken Sie daran, die Verbindung erneut zu trennen, nachdem Sie den Status überprüft haben, damit er im Hintergrund weiter ausgeführt wird.
Sie können den Befehl, über den screen
im Hintergrund ausgeführt werden soll, auch auf einen Schlag ausführen, indem Sie [jemand korrigiert mich bitte, wenn ich falsch liege] screen -dm 'command'
. Vielleicht möchten Sie es, man screen
bevor Sie es mit dem letzten versuchen.
BEARBEITEN:
Ich bearbeite meine Antwort, weil Sie bestätigt haben, dass screen
dies in diesem Szenario keine Unterstützung bietet, aber Sie haben auf meinen Kommentar scp
geantwortet und vorgeschlagen, herauszufinden, welche Ergebnisse Sie erhalten. Darauf haben Sie seltsamerweise geantwortet, dass es einwandfrei funktioniert hat.
Meine neue Antwort lautet also: benutze scp
- oder ssh
(mit tar
) - stattrsync
Zugegeben, scp
die große Anzahl von Merkmalen wie nicht unterstützt rsync
werden, würde aber eigentlich nur , wie viele Features zu entdecken , überrascht , dass es funktioniert Unterstützung , die fast ist identisch zu dem rsync
.
Reale Szenarien für scp
und andere Alternativen zu rsync
:
Vor einiger Zeit wurde ich beauftragt, ein Shell-Skript zu erstellen, mit dem Protokolle von unseren Produktionsservern abgerufen und lokal auf einem Webserver gespeichert werden, damit Entwickler zur Fehlerbehebung darauf zugreifen können. Nachdem ich erfolglos versucht hatte, das Unix-Team zur Installation rsync
auf unseren Servern zu bewegen, kam ich auf eine Problemumgehung, scp
die genauso gut funktionierte.
Davon abgesehen habe ich das Skript kürzlich so geändert, dass es nur ssh
und tar
- GNU tar
/ verwendet gtar
, um genau zu sein. GNU tar
unterstützt viele der Optionen , die Sie tatsächlich in finden rsync
, wie zum Beispiel --include
, die --exclude
Erlaubnis / Attribut Erhaltung, Kompression usw.
Die Art und Weise, wie ich dies jetzt erreiche, besteht darin, ssh
auf den Remote-Server (über pubkey auth) zuzugreifen und zu verwenden gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- dies schreibt alle Informationen in stdout
, die dann [lokal] weitergeleitet werden, tar -xzf
damit keine Änderungen auf dem Remote-Produktionsserver vorgenommen werden und alle Dateien werden unverändert auf den lokalen Server gezogen. Es ist eine großartige Alternative zu rsync
diesem Fall. Das einzige, was weder wichtig tar
noch scp
unterstützt wird, sind inkrementelle Sicherungen und die Ebene der Fehlerprüfung auf Blockebene, die diese rsync
Funktionen bietet.
Der vollständige Befehl , den ich mich beziehe , bei der Verwendung ssh
und tar
so etwas wie diese würde (remote ist Solaris 10, lokal ist Debian, für das, was es wert ist ):
cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz
In Ihrem Szenario wäre es umgekehrt - tar -cf -
lokal und über einen Pipe an den Remote-Server ssh user@remotehost "tar -xf -"
- es gibt eine andere Antwort, die auf diese Art von Verhalten verweist, aber nicht so detailliert ist.
Es gibt einige andere Optionen, die ich aufgenommen habe, um die Dinge zu beschleunigen. Ich habe alles unermüdlich geplant, um die Ausführungszeit so gering wie möglich zu halten. Sie würden denken, dass die Verwendung der Komprimierung mit tar
sinnlos wäre, aber sie beschleunigt die Dinge tatsächlich ein wenig, ebenso wie die Verwendung des -C
Flags mit ssh
, um die ssh
Komprimierung zu aktivieren . Ich kann diesen Beitrag zu einem späteren Zeitpunkt aktualisieren, um den genauen Befehl aufzunehmen, den ich verwende (der dem, was ich gepostet habe, sehr ähnlich ist), aber ich habe im Moment keine Lust, auf VPN zuzugreifen, da ich diese Woche im Urlaub bin.
Unter Solaris 10 verwende ich es auch -c blowfish
, da es die schnellste Verschlüsselung ist, mit der man sich authentifizieren kann, und auch dazu beiträgt, die Dinge ein wenig zu beschleunigen, aber unser Solaris 11 unterstützt es entweder nicht oder hat diese Verschlüsselungssuite deaktiviert.
Wenn Sie sich für die Option ssh
/ entscheiden tar
, ist es außerdem eine gute Idee, meine ursprüngliche Lösung zu implementieren, screen
wenn Sie ein Backup erstellen , das eine Weile dauert. Wenn nicht, stellen Sie sicher, dass Ihre Keepalive- / Timeout-Einstellungen in Ihrem ssh_config
genau richtig eingestellt sind. Andernfalls führt diese Methode sehr wahrscheinlich zu einem Rohrbruch.
Selbst wenn Sie mitmachen scp
, finde ich es immer eine bewährte Methode, screen
oder tmux
wenn Sie eine Operation dieser Art durchführen, nur für den Fall . Oft folge ich nicht meinen eigenen Ratschlägen und tue dies nicht, aber es ist in der Tat eine gute Praxis, eines dieser Tools zu verwenden, um sicherzustellen, dass der Remote-Job nicht versagt, weil Ihre aktive Shell-Sitzung irgendwie getrennt wird.
Ich weiß, dass Sie die Grundursache Ihres rsync
Problems herausfinden möchten . Wenn dies jedoch wirklich wichtig ist, sind dies zwei großartige Problemumgehungen, mit denen Sie in der Zwischenzeit experimentieren können.
kerberos
auf dem Remote-Server authentifiziere.