
Ich habe ein freigegebenes Verzeichnis /path/to/dir
. Ich führe in diesem Verzeichnis einen Sicherungsvorgang aus. Der Vorgang läuft auf Server A, während ich nur auf Server B Zugriff habe. Wenn der Sicherungsvorgang auf Server A abgeschlossen ist, habe ich die Daten im freigegebenen Verzeichnis, /path/to/dir
das auch auf Server B verfügbar ist.
Nun habe ich auf Server B ein Bash-Skript, das nur ausgeführt werden darf, wenn der Backup-Prozess abgeschlossen ist. Da ich auf den anderen Server nicht zugreifen kann, habe ich mir folgendes überlegt:
Kann ich prüfen, ob /path/to/dir
es noch vom Sicherungsvorgang verwendet wird und mein Skript nur ausführen, wenn der Vorgang im Verzeichnis nicht mehr ausgeführt wird?
Ich weiß nicht, ob es wichtig ist zu wissen, dass es ein freigegebenes Verzeichnis (NFS) ist.
Antwort1
Eine bessere Lösung: Erstellen Sie auf der Freigabe eine Sperrdatei, die nur während der Ausführung des Auftrags vorhanden ist und auf Server A gelöscht wird, sobald der Auftrag abgeschlossen ist.
Prüfen Sie auf Server B einfach, ob diese Datei vorhanden ist, und warten Sie, bis sie verschwunden ist.
Antwort2
Richten Sie eine produzierende App A ein, um die Dateien zu erstellen, example_output.tar.gz.part
und benennen Sie sie erst um, wenn sicher ist, dass alles fertig istexample_output.tar.gz
Legen Sie fest, dass die konsumierende App B die Dateien ignoriert *.part
und alle Dateien verarbeitet, die nicht übereinstimmen*.part
Dieses Schema ist erkennbar, da es in vielen Verbraucheranwendungen verwendet wird (man denke zum Beispiel an Webbrowser oder SCP-Clients).
Auf diese Weise benötigen Sie keine Sperrdatei und können mehrere Verbraucher haben. Eine Sperrdatei ist immer eine potenzielle Fehlerursache, wenn nach dem Beenden einer Anwendung (oder einem Neustart des Servers) eine alte übrig bleibt.