Transferência FTP de entrada não exibida em lsof ao usar um cliente FTP específico

2

Eu tenho um script que monitora continuamente um diretório de dropbox FTP e processa novos arquivos quando eles entram. O script executa lsof em cada arquivo antes de tentar processá-lo para determinar se o arquivo ainda está sendo transferido ( alguns arquivos são grandes e demoram um pouco para serem transferidos) para evitar o processamento de um arquivo incompleto.

Tudo funcionou bem, exceto com esse cliente FTP específico. Por algum motivo, quando esse cliente faz upload de um arquivo para o servidor FTP, a execução de lsof no arquivo não retorna nada. Eu testei isso executando watch -n0.1 'lsof /path/to/file.txt' e, em seguida, carregando 'arquivo.txt' para o servidor usando dois clientes FTP diferentes. Ao fazer o upload com o Cyberduck, o lsof retorna dados sobre o arquivo aberto, ao usar o outro cliente FTP, o lsof não retorna nada. Eu não entendo como isso poderia ser (e FWIW, eu obtenho os mesmos resultados com o comando fuser ). Eu também estou executando watch -n0.1 'ls -l /path/to/file' e posso ver o tamanho do arquivo mudando conforme os clientes estão transferindo, então eu sei que os clientes estão gravando no arquivo.

Eu sei que existem soluções alternativas para resolver o meu problema, mas estou mais interessado em saber exatamente como esse cliente FTP pode gravar em um arquivo sem que esse arquivo seja 'aberto' no que diz respeito ao sistema. E ideias?

Estou executando o vsftp no Ubuntu Server 12.04 LTS

Atualização:

Acontece que quando eu testei isso anteriormente usando o Cyberduck, eu estava me conectando ao servidor FTP usando SFTP, não FTP. Quando eu carrego um arquivo com o Cyberduck usando o FTP, me deparo com o mesmo problema - o arquivo é carregado, mas nada aparece em lsof . Eu também usei o cliente FTP padrão no Debian para fazer upload de um arquivo usando PUT e APPEND - novamente, a mesma coisa.

Parece que todos os uploads de FTP (independentemente do cliente) gravam em seus respectivos arquivos sem "abrir" o arquivo no que diz respeito ao sistema. Eu testei este cenário em outro servidor FTP, e tudo funciona como esperado - quando os arquivos estão sendo enviados, eles são exibidos como abertos em lsof. Então, há algo errado com a configuração específica do meu servidor FTP. Eu suspeito que tenha algo a ver com a versão do lsof e / ou vsftpd. São versões mais antigas, 4.81 e 2.3.2, respectivamente.

    
por bcst 04.07.2014 / 13:24

1 resposta

0

Além do STOR (PUT) que a maioria de nós conhece e usaria, um comando FTP relativamente incomum para carregar dados em um servidor remoto é 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.

O permite que um cliente adicione um arquivo sem mantê-lo aberto o tempo todo ...

    
por 04.07.2014 / 15:09

Tags