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.