Rsync zum Festschreiben der Übertragung/des MV, nachdem alles lokal gespeichert wurde

Rsync zum Festschreiben der Übertragung/des MV, nachdem alles lokal gespeichert wurde

Gibt es eine Möglichkeit, einen Ordner per Rsync mit einem entfernten Serverordner zu synchronisieren, aber alles erst zu verschieben, wenn die gesamte Übertragung abgeschlossen ist?

Ich möchte nicht, dass Dateien einzeln nacheinander verschoben werden, da dies zu Problemen mit dem laufenden Webserver führen würde.

Ich möchte lieber, dass der komplette Ordner verschoben wird, nachdem alles auf den Server übertragen wurde (was ungefähr 1 Sekunde dauert).

Antwort1

Sie suchen den--delay-updatesOption. Von man rsync:

   --delay-updates
          This  option puts the temporary file from each updated file into
          a holding directory until the end of the transfer, at which time
          all  the files are renamed into place in rapid succession.  This
          attempts to make the updating of the files a little more atomic.
          [...]
          See  also the "atomic-rsync" perl script in the "support" subdir
          for an update algorithm  that  is  even  more  atomic  (it  uses
          --link-dest and a parallel hierarchy of files).

Antwort2

Am sichersten ist es, wenn rsync die Dateien in einem alternativen Verzeichnis außerhalb des Docroots des Webservers ablegt. Ändern Sie dann die Serverkonfiguration, sodass Docroot auf den neuen Ordner verweist, und signalisieren Sie dem Webserver, dass er einen"anmutig"Neuladen der Konfiguration. Bei Apache sollte dies garantieren, dass keine Anfragen falsch behandelt oder gelöscht werden.

Das USR1- oder Graceful-Signal veranlasst den übergeordneten Prozess, den untergeordneten Prozessen mitzuteilen, dass sie nach ihrer aktuellen Anfrage beendet werden sollen (oder sofort beendet werden sollen, wenn sie nichts verarbeiten). Der übergeordnete Prozess liest seine Konfigurationsdateien erneut und öffnet seine Protokolldateien erneut. Wenn ein untergeordneter Prozess beendet wird, ersetzt der übergeordnete Prozess ihn durch einen untergeordneten Prozess aus der neuen Generation der Konfiguration, der sofort mit der Verarbeitung neuer Anfragen beginnt.

Mit anderen Worten würde ich dies mit einem Shell-Skript und SSH automatisieren, anstatt zu versuchen, Rsync-Optionen zur Verwaltung Ihres Webservers zu finden.

verwandte Informationen