который Inotify Event сигнализирует о завершении большой операции файла?

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

  •  04-10-2019
  •  | 
  •  

Вопрос

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

Используя 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 на манекена. Важно то, что манекен как передавать в качестве последнего файла в последовательности.

Я надеюсь, что это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top