Входящая передача по FTP не отображается в lsof при использовании определенного клиента FTP

У меня есть сценарий, который непрерывно отслеживает каталог Dropbox FTP и обрабатывает новые файлы, когда они приходят. Сценарий выполняется lsof для каждого файла, прежде чем он попытается обработать его, чтобы определить, передается ли файл (некоторые файлы имеют большой размер и требуют много времени для передачи), чтобы избежать обработки неполного файла.

Все работало нормально, за исключением этого конкретного FTP-клиента. По какой-то причине, когда этот клиент загружает файл на FTP-сервер, работает lsof по файлу ничего не возвращает. Я проверил это, запустив watch -n0.1 'lsof /path/to/file.txt' и затем загрузите файл file.txt на сервер, используя два разных клиента FTP. При загрузке с помощью Cyberduck lsof возвращает данные об открытом файле, при использовании другого FTP-клиента lsof ничего не возвращает. Я не понимаю, как это может быть (и FWIW, я получаю те же результаты с fuser команда). Я тоже бегу watch -n0.1 'ls -l /path/to/file' и я вижу, как изменяется размер файла по мере передачи клиентов, поэтому я знаю, что клиенты записывают в файл.

Я знаю, что есть обходные пути для решения моей проблемы, но меня больше интересует, как именно этот FTP-клиент может записывать в файл, не открывая этот файл, если речь идет о системе. А идеи?

Я запускаю vsftp на Ubuntu Server 12.04 LTS

Обновить:

Оказывается, когда я проверял это ранее с помощью Cyberduck, я подключался к FTP-серверу, используя SFTP, а не FTP. Когда я загружаю файл с помощью Cyberduck через FTP, я сталкиваюсь с той же проблемой - файл загружается, но в lsof, Я также использовал стандартный FTP-клиент в Debian для загрузки файла, используя PUT и APPEND- опять то же самое.

Похоже, что все загрузки по FTP (независимо от клиента) записывают в соответствующий файл без "открытия" файла, если это касается системы. Я протестировал этот сценарий на другом FTP-сервере, и все работает, как и ожидалось - при загрузке файлов они отображаются как открытые в lsof. Итак, что-то не так с конкретной конфигурацией моего FTP-сервера. Я подозреваю, что это как-то связано с версией lsof и / или vsftpd. Это более старые версии, 4.81 и 2.3.2 соответственно.

1 ответ

В дополнение к STOR (PUT), который большинство из нас знает и будет использовать, для загрузки данных на удаленный сервер используется относительно необычная команда FTP: APPEND:

     APPEND (with create) (APPE)

        This command causes the server-DTP to accept the data
        transferred via the data connection and to store the data in
        a file at the server site.  If the file specified in the
        pathname exists at the server site, then the data shall be
        appended to that file; otherwise the file specified in the
        pathname shall be created at the server site.

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

Другие вопросы по тегам