Was passiert, wenn Perl versucht move () auf eine Datei aufzurufen, die hochgeladen werden?

StackOverflow https://stackoverflow.com/questions/808419

  •  03-07-2019
  •  | 
  •  

Frage

Jemand FTPing eine Datei mit einer Größe 10 MB auf einem Linux-Server in den Ordner. Während die Datei im Übergang ist erwacht ein cron und einen Perl-Skript abfeuert, die auf den FTP-Ordner suchen entworfen und bewegen, was es zu einem gewissen alternativen Ordnern dort findet. Ich verwende die move() Funktion von File :: Copy . Der Perl-Prozess benennt die Dateien tatsächlich als Teil seiner Aufgabe. Ist diese Angelegenheit, oder ist das FTP nicht, was das Dateisystem die Datei als?

beschreibt

Wird move() erfolgreich zu sein und eine Teildatei verschieben, die FTP verlassen, was zu tun? Oder bewegen wird scheitern und 0 zurückgeben?

War es hilfreich?

Lösung

Nein, soll bewegen lassen Sie den Download-Prozess auf die neue Position abzuschließen. Sie bewegen sich nur die Inode von einer Position zur anderen. Die offene Dateideskriptor aus dem Download-Programm sollte noch darauf zeigen.

Ich möchte nur wiederholen, was einige andere erwähnt. Dies funktioniert nur, solange der Verschiebevorgang auf demselben Dateisystem ist. Wenn es als ein anderes Dateisystem als die Inode nicht übertragen werden kann, weil es immer auf das gleiche Dateisystem gehört. Das meist wahrscheinlich Szenario dann wäre, dass die Teildaten in diesem Moment wird an die neue Position kopiert, während immer noch das Programm herunterlädt, in dem alten Inode, die nicht mehr auf eine Datei angehängt ist und daher nicht verwendet werden kann.

Andere Tipps

Da es keine Standard move ist, ist es schwer zu wissen, was in Ihrem Szenario vor sich geht. Wenn Sie rename gemeint, dann werden Sie wahrscheinlich keine Probleme haben, da der wichtigste Weg, Ihre Situation schief gehen würde, ist, wenn Sie die Datei von einem Dateisystem zum anderen bewegten sich (und damit eine tun Kopieren und Löschen, kein wirkliche Bewegung), und auf den meisten Systemen rename unter diesen Umständen scheitern. (Also, wenn Ihr Setup überhaupt funktioniert, wird es in Ordnung sein.)

Wenn Sie nicht rename verwenden, aber einige move Funktion, die zum Beispiel behandelt über Dateisysteme zu bewegen, dann könnte man sehr gut mit einer Teildatei aufzuwickeln, wenn mehrere Dateisysteme beteiligt sind. (Dies kann als eine sehr unangenehme Gotcha aufzuwickeln, wenn zum Beispiel, du bist alles auf einem Dateisystem jetzt, aber später auf diese Dateien Sie hochladen viel Platz in Anspruch nehmen und Sie ein Laufwerk hinzufügen, die ihnen gewidmet Speicherung - und jetzt Sie tun ein Querdateisystem bewegen.)

Ich bin nicht sicher, aber wahrscheinlich nichts falsch passieren wird. nicht die Datei Inode-Nummer ändern bewegen, so dass der FTP-Server nicht den Umzug überhaupt bemerkt und wird auch weiterhin in die Datei in dem neuen Standort zu schreiben. Um es kurz gesagt, die move() erfolgreich sein wird und die Upload wird in der neuen Position fortgesetzt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top