Ich erhalte eine gzip-Datei in einem Pfad.
Eingabeordnerpfad:
<server>/input_gate
Ich möchte überprüfen, ob die GZIP-Datei, die ich in diesem Ordner erhalte, gültig ist. Ich habe den folgenden Befehl verwendet. Es funktioniert gut, eine gültige gzip-Datei zu finden oder nicht?
gzip -t -v <file_name>
Beim Verschieben wird die Datei jedoch als ungültige Datei angezeigt. Tatsächlich ist die Datei jedoch nach dem Verschieben gültig. Gibt es eine Möglichkeit herauszufinden, ob die Datei, die ich erhalte, eine vollständig verschobene Datei ist oder noch verschoben wird?
Verwenden
lsof
path/to/input_gate
Führen Sie den folgenden Befehl aus, um zu testen, ob in einem Prozess eine Datei geöffnet ist :Dies wird mit Code 0 beendet, wenn die Datei von einem Prozess verwendet wird, und mit Code 1, wenn sie von keiner Verarbeitung verwendet wird (oder ein Fehler aufgetreten ist). Dieser Exit-Code kann von Shell-Befehlen verwendet werden.
Testen
Um dies zu testen, erstellen wir einen Prozess zum Öffnen unserer Datei:
Dadurch bleibt die Datei 10 Sekunden lang geöffnet.
lsof
Führen Sie zum Testen schnell den folgenden Befehl aus:Warten Sie 10 Sekunden und versuchen Sie es erneut:
Warten bis die Datei fertig ist
Wenn Sie warten möchten, bis kein anderer Prozess die Datei verwendet:
Verwenden
inotifywait
Wenn Ihr System dies unterstützt
inotifywait
(ein Linux-System sollte dies tun), können Sie in der Datei nach Ereignissen suchen, die für Sie von Interesse sind:Der obige Befehl wird blockiert, bis ein Prozess die Datei geschlossen hat.
Der Vorteil dieses Ansatzes besteht darin, dass keine Abfragen durchgeführt werden müssen.
Der Nachteil dieses Ansatzes ist, dass Sie beim ersten Mal benachrichtigt werden, dass ein Prozess die Datei schließt und dies möglicherweise nicht mit allen Prozessen übereinstimmt, die die Datei geschlossen haben.
quelle