Если ваша ОС поддерживает это, вы можете взглянуть на incrond . События, которые можно отслеживать, определены в incrontab Возможно, событие, которое вы ищете, это
IN_CLOSE_WRITE Файл, открытый для записи, был закрыт (*)
или в сочетании с
IN_CREATE File / каталог, созданный в наблюдаемом каталоге (*)
Обратите внимание, что
При мониторинге каталога ... указанные выше события могут происходить для файлов в каталоге, и в этом случае поле имени в возвращаемых данных события идентифицирует имя файл в каталоге.
Решение, которое я использую (которое, по общему признанию, не является пуленепробиваемым, но сработало для меня 100% времени) - это запрашивать размер файла каждые 10 секунд, и если он не изменился с момента последнего запроса, предположим, что это сделано, и начнем передачу.
Конечно, возможно, что сеть могла иметь сообщение за 10+ секунд, из-за которого передача еще не завершена, но это довольно редкое явление, и для этого нужны контрольные суммы, такие как MD5.
Вы не сможете сделать это правильно из bash без помощи клиента.
На стороне FTP-сервера несколько FTP-серверов имеют методы для запуска программы один раз загрузка была прекращена (она могла быть завершена или клиент мог быть отключен, FTP-сервер не имеет возможности узнать, действительно ли это сделано).
Чтобы сделать это правильно, лучшим решением является загрузка клиентом файл с временным именем, затем переименуйте файл, как только он закончится, на правильное имя. Затем вы исключаете из обработки все файлы с именем «something.tmp». В противном случае попросите клиента загрузить файл блокировки с нулевым байтом, загрузить реальный файл, а затем удалить файл блокировки. Затем вы можете проверить наличие файла блокировки
filelist = ...
if [ -e /home/ftp/incoming/lockfile ]; then exit; fi
... process $filelist ...
. Если клиент загружает много, тогда файл блокировки может присутствовать каждый раз, когда вы запускаете свой скрипт, и ничего не будет сделано. В этом случае вам нужно будет сравнить временные метки файлов с файлом блокировки. Файлы старше файла блокировки должны быть полными:
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Если ни ваш FTP-сервер, ни ваш клиент не будут участвовать вместе с вами, вы можете сделать что-то вроде
] Файлы, которые не стали больше за 5 минут, вероятно, уже готовы. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Если ни ваш FTP-сервер, ни ваш клиент не будут участвовать вместе с вами, вы можете сделать что-то вроде
] Файлы, которые не стали больше за 5 минут, вероятно, уже готовы. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Если ни ваш FTP-сервер, ни ваш клиент не будут участвовать вместе с вами, вы можете сделать что-то вроде
] Файлы, которые не стали больше за 5 минут, вероятно, уже готовы. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Если ни ваш FTP-сервер, ни ваш клиент не будут участвовать вместе с вами, вы можете сделать что-то вроде
Файлы, которые не стали больше за Вероятно, 5 минут - это все, что они собираются сделать. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
for f in ...; do
if [ ! -e /home/ftp/incoming/lockfile -o $f -ot /home/ftp/incoming/lockfile ]; then
... process $f
fi
done
Если ни ваш FTP-сервер, ни ваш клиент не будут участвовать вместе с вами, вы можете сделать что-то вроде
Файлы, которые не стали больше за Вероятно, 5 минут - это все, что они собираются сделать. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
Файлы, размер которых не увеличился за 5 минут, скорее всего, уже готовы. Выполнение этого в bash
оставлено в качестве упражнения для читателя.
Файлы, размер которых не увеличился за 5 минут, скорее всего, уже готовы. Выполнение этого в bash
оставлено в качестве упражнения для читателя.