Proftpd verify complete upload

Мне было интересно, есть ли лучший способ проверить, была ли загрузка на ваш ftp-сервер успешной.

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

Файлы в этих каталогах являются временными, они удаляются после обработки.

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

Мне не нравится, как система в настоящее время обрабатывает эти ситуации, потому что она будет пытаться обработать файл и терпеть неудачу, если загрузка файла была неполной, вместо того, чтобы ждать и позволять пользователю возобновить загрузку до ее завершения. {1}} Это может быть хорошо для небольших файлов, загрузка которых не занимает много времени, но если файл большой, я хотел бы иметь возможность возобновить загрузку.

Мне также не нравятся циклы каталогов и файлов, система простаивает при высокой загрузке процессора, поэтому я реализовал pyinotify для запуска действия при записи файла. Я действительно не смотрел исходный код, я могу только предположить, что он более оптимизирован, чем текущая реализация (которая делает больше, чем я описал).

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

Я знаю, что могу проанализировать xferlog, чтобы получить все полные закачки. Например:

awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog

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

Итак, моим решением было бы проверить xferlog в моем цикле выполнения и обрабатывать только полные файлы.

Если нет лучшей практики или просто лучшего способа сделать это?

В чем заключаются недостатки этого метода?

Я запускаю свое приложение на сервере debian, и proftpd установлен на том же сервере. Кроме того, у меня нет контроля над клиентами, отправляющими файл.

5
задан Mike Causer 20 February 2014 в 13:25
поделиться