какое событие inotify сигнализирует о завершении операции с большим файлом? - PullRequest
3 голосов
/ 24 мая 2010

для больших файлов или медленных соединений, копирование файлов может занять некоторое время.

используя pyinotify, я наблюдал за кодом события IN_CREATE. но это, кажется, происходит в начале передачи файла. мне нужно знать, когда файл полностью скопирован - он не очень полезен, если он находится только наполовину.

когда передача файла завершена и завершена , какое событие inotify происходит?

Ответы [ 3 ]

12 голосов
/ 24 мая 2010

IN_CLOSE вероятно означает, что запись завершена. Это не совсем так, поскольку некоторые приложения являются плохими участниками и постоянно открывают и закрывают файлы во время работы с ними, но если вы знаете приложение, с которым имеете дело (передача файлов и т. Д.) И понимаете его поведение, вы наверное нормально. (Обратите внимание, это не означает, что передача завершена успешно, очевидно, это просто означает, что процесс, открывший дескриптор файла, закрыл его).

IN_CLOSE ловит оба IN_CLOSE_WRITE и IN_CLOSE_NOWRITE, поэтому принимайте решение о том, хотите ли вы просто поймать один из них. (Вы, вероятно, хотите, чтобы они оба - WRITE/NOWRITE связаны с правами доступа к файлу, а не с тем, были ли какие-либо записи сделаны на самом деле).

В документации Documentation / filesystems / inotify.txt .

имеется больше документации (хотя и раздражающей, но не этой информации).
1 голос
/ 14 мая 2014

В моем случае я хотел выполнить скрипт после полной загрузки файла. Я использовал WinSCP, который пишет большие файлы с расширением .filepart до завершения.

Сначала я начал изменять свой скрипт, чтобы игнорировать файлы, если они сами заканчиваются на .filepart или если в этом же каталоге существует другой файл с тем же именем, но с расширением .filepart, следовательно, это означает, что загрузка еще не завершена .

Но затем я заметил, что в конце загрузки, когда все части были закончены, у меня появляется уведомление IN_MOVED_IN, которое помогло мне запустить мой скрипт именно тогда, когда я этого хотел.

Если вы хотите знать, как ведет себя ваш загрузчик файлов, добавьте это в incrontab:

/your/directory/ IN_ALL_EVENTS echo "$$ $@ $# $% $&"

, а затем

tail -F /var/log/cron

и отслеживайте все происходящие события, чтобы выяснить, какое из них подходит вам лучше всего.

Удачи!

0 голосов
/ 28 февраля 2014

Почему бы вам не добавить фиктивный файл в конце передачи? Вы можете использовать код события IN_CLOSE или IN_CREATE на манекене. Важно то, что манекен должен быть передан как последний файл в последовательности.

Надеюсь, это поможет.

...