howto force refresh NFS-cache beim Einchecken neu erstellte Datei?

Wenn eine Datei erstellt, die auf einem Linux freigegebenen NFS-mount, der client ist entweder Linux o r mac-Maschinen. Die Existenz oder das fehlen einer Datei ist der Schlüssel für das, was als Nächstes zu tun, aber die Kontrolle ist nicht immer das richtige Ergebnis:

e.g ich Tue dies in perl, das noch nicht gut funktioniert, esp mit mac-Maschinen

write_key_file();  # write a file that must be checked before proceeding

Folgende Prüfungen können nicht immer true zurück wenn die Datei existiert

Problem - mit diesem Befehl in perl nicht zurück richtigen status in NFS-system:

if( -e $file){}

Überhören Lösung, die nicht funktioniert:

 sleep(5);   # wait 5 seconds
 system("ls -ltr"); # force to cache?
 if(-e $file){}

Ich nicht wollen, um jede Datei prüfen, wie diese, aber es gibt ein paar wichtige Orte, wo es wichtig ist, um die richtige Datei status.

Haben wir bessere Möglichkeiten, um Kraft regenerieren nfs-cache auf eine bestimmte Datei auf einem bestimmten Verzeichnis? Danke.

Ich bin nicht sicher, dass dies ein XY-problem, aber es gibt ein paar schwächsten Punkte, die alle Lösungen.

Ein-NFS-clients Einstellung

Wenn es eine Lösung in dieser Phase, es würde großartig werden!

B -- exit_code-oder return-code von Funktion schreiben

$exit_code = write_key_file();

Das problem dabei, nicht alle schreiben werden, in den Anwendungsbereich des code-block. dies nur ein Teil des Problems gelöst.

C -- Disable NFS-cache für die Datei oder das Verzeichnis für die Datei überprüfen

Ich brauche zu machen sicher ist das möglich und wie? wenn Nein und warum?

und ich bin offen für alle möglichen Lösungen, keine Lösung oder andere Möglichkeiten.

  • Dies ist eine hässliche Sache zu tun. Was sind Sie eigentlich versucht zu erreichen? Es ist wahrscheinlich, es gibt einen viel besseren Weg. NFS-caches von design für Effizienz. Nicht-Cache-Dateisystem IO kann getan werden, aber es ist viel langsamer, als Sie sich vorstellen können. In der Regel ist die Antwort: - versuchen Sie es anders.
  • Ich bin nicht auf der Suche nach Möglichkeiten, um zu deaktivieren NFS-cache oder Zwischenspeichern für alle Dateien, nur für ein paar wichtige Dateien in das Programm, für das die bestimmte Datei in einem bestimmten Verzeichnis. Ich kann mir nicht denken, alternative Möglichkeiten, dies zu erreichen. Ich kann nur so viel für den Ruf habe ich so weit. vielen Dank für Ihre Aufmerksamkeit
  • Hier ist ein einfacher Ansatz.
  • Mein Punkt ist, dies kann ein XY-problem. Etwas, das am besten gelöst werden kann durch die Einnahme von s einen Schritt zurück und schauen, was Sie versuchen zu erreichen
  • Sie können möglicherweise verwenden Sie sysopen mit O_RDWR|O_CREAT|O_EXCL zu zwingen, NFS-cache aktualisieren - wenn der Aufruf erfolgreich ist, dann wird die Datei gar nicht existiert (aber nicht alle NFS-Implementierungen behandeln O_EXCL richtig). Ich verwendet diese Technik in python (ich bin NULL in perl). Siehe meine Antwort an stackoverflow.com/questions/29979624/...
  • sind Sie sicher, dass sysopen können eine Datei öffnen, die -e $file nicht vorhanden ist?
  • ja, Sie versuchen, die Datei zu schreiben wird der NFS-client eine Verbindung mit dem server sofort, während -e $file, wird für eine Leseoperation, wird wahrscheinlich mit dem cache.
  • Ich abgeändert, um python, python-Antwort ist in Ordnung mit mir.
  • Vielleicht ist dies ein Versuch Wert: unix.stackexchange.com/a/207383. Er macht einen opendir/closedir auf das übergeordnete Verzeichnis.

InformationsquelleAutor Gang | 2016-01-27
Schreibe einen Kommentar