
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.