который Inotify Event сигнализирует о завершении большой операции файла?
Вопрос
Для больших файлов или медленных подключений копирование файлов может занять некоторое время.
Используя Pyinotify, я наблюдал за кодом события In_create. Но это, кажется, происходит на Начало передачи файлов. Мне нужно знать, когда файл полностью копируется - это не так много использовать, если это только половина там.
Когда передача файлов закончен и завершен, Что inotify Event уволен?
Решение
IN_CLOSE
наверное означает, что запись завершена. Это не наверняка, так как некоторые приложения являются плохими актерами и открытыми и закрытыми файлами постоянно работают с ними, но если вы знаете приложение, с которым вы имеете дело (передача файлов и т. Д.) И понять его «поведение, вы Вероятно, хорошо. (Примечание, это не значит, что перевод завершен успешно, очевидно, это просто означает, что процесс, который открыл дескриптор файла закрыл его).
IN_CLOSE
ловит оба IN_CLOSE_WRITE
а также IN_CLOSE_NOWRITE
, Так что сделайте свои собственные решения о том, хотите ли вы просто поймать одного из них. (Вы, вероятно, хотите, чтобы они оба - WRITE/NOWRITE
связано с разрешениями файлов, а не какие пишеты были фактически сделаны).
Есть больше документации (хотя и раздражающе, а не это часть информации) в Документация / файловые системы / inotify.txt.
Другие советы
Для моего случая я хотел выполнить скрипт после того, как файл был полностью загружен. Я использовал WinSCP, который пишет большие файлы с .filepart
расширение до этого.
Сначала я начал изменять свой скрипт, чтобы игнорировать файлы, если они сами заканчиваются с помощью .filepart или, если есть другой файл, существующий в том же каталоге с тем же именем, но расширение.
Но потом я заметил в конце загрузки, когда все части были закончены, у меня есть IN_MOVED_IN
Уведомление о запуске, который помог мне запустить свой сценарий именно, когда я хотел его.
Если вы хотите узнать, как работает ваш файл загрузки, добавьте это в Incrobontab:
/your/directory/ IN_ALL_EVENTS echo "$$ $@ $# $% $&"
а потом
tail -F /var/log/cron
И следить за всеми событиями, запускаемыми, чтобы узнать, какой подходит вам лучше всего.
Удачи!
Почему бы вам не добавить фиксированный файл в конце передачи? Вы можете использовать код события In_Close или In_Create на манекена. Важно то, что манекен как передавать в качестве последнего файла в последовательности.
Я надеюсь, что это поможет.