Pergunta

Nós temos uma configuração do sistema ftp para monitorar / download de servidores FTP remotos que não estão sob nosso controle. O script se conecta ao FTP remoto, e pega os nomes de arquivos no servidor de arquivos, que, em seguida, verificar para ver se é algo que já foi baixado. Se não tiver sido transferido, em seguida, baixar o arquivo e adicioná-lo à lista.

Recentemente, correu para um problema, onde alguém no lado de FTP remoto, irá copiar em um único arquivo enorme (> 1 GB), então o script vai acordar ver um novo arquivo e começar a baixar o arquivo que está sendo copiado em.

Qual é a melhor maneira de verificar isso? Eu estava pensando em pegar o tamanho do arquivo de esperar alguns segundos verificando o tamanho do arquivo novamente e ver se ele tem aumentado, se não tiver então baixá-lo. Mas desde que o tempo é a preocupação, não podemos esperar alguns segundos para cada conjunto de arquivos e ver se é o tamanho do arquivo aumentou.

Qual seria a melhor maneira de fazer isso, atualmente tudo é feito via pítons ftplib, como podemos fazer isso além de usar o método acima mencionado.

Mais uma vez, deixe-me reiterar isso, temos 0 controle sobre os sites de FTP remoto.

Graças.

Update1:

Eu estava pensando que se eu tentasse mudar o nome ... uma vez que temos todas as permissões sobre o ftp, se o upload do arquivo está em andamento seria o comando de renomeação falhar?

Não temos quaisquer opções reais aqui ... não é?

UPDATE2: Bem algo aqui interessante alguns dos ftps testadas no aparecem para alocar automaticamente o espaço assim que a transferência for iniciado.

por exemplo. Se eu transferir um arquivo de 200MB para o servidor ftp. Enquanto a transferência está ativa se eu ligar para o servidor ftp e fazer um tamanho, enquanto o carregamento está acontecendo. Ele mostra 200mb para o tamanho. Mesmo que o arquivo é apenas como 10% completa.

As permissões também parecem ser definida aleatoriamente o servidor FTP que vem com o IIS define as permissões depois que o arquivo é copiar acabado. Enquanto alguns dos outros servidores FTP mais velhos defini-lo assim que você enviar o arquivo.

: '(

Foi útil?

Solução

“Danem-se os torpedos! velocidade à frente Full!”

Basta baixar o arquivo. Se for um arquivo grande, em seguida, depois da conclusão do download de esperar o tempo que é razoável para o seu cenário e continuar o download a partir do ponto em que parou. Repita até que não haja mais coisas para download.

Outras dicas

Como você diz que tem 0 controle sobre os servidores e não pode fazer seus clientes arquivos pós gatilho como sugerido por S. Lott, você tem que lidar com a solução imperfeita e transmissão de arquivo incompleto risco, talvez por esperar por um tempo e comparar os tamanhos dos arquivos antes e depois.

Você pode tentar mudar o nome como você sugeriu, mas como você tem 0 controle que você não pode ter certeza de que o ftp-server-administrador (ou seu sucessor) não muda plataformas ou servidores de FTP ou restrinja suas permissões.

Sorry.

Se você está lidando com vários arquivos, você pode obter a lista de todos os tamanhos ao mesmo tempo, esperar dez segundos, e ver quais são os mesmos. Qualquer que seja ainda são os mesmos deve ser seguro para download.

Você não pode saber quando a cópia OS é feito. Poderia retardar ou espera.

Para absoluta certeza, você realmente precisa de dois arquivos.

  • O arquivo enorme.
  • E um arquivo de acionamento pequena.

Eles podem mexer com o arquivo maciça tudo que eles querem. Mas quando tocam o arquivo de gatilho, você está baixando ambos.


Se você não pode obter um gatilho, você tem que equilibrar o tempo necessário para pesquisa contra o tempo necessário para download.

Faça isso.

  1. Obter uma listagem. Verifique timestamps.

  2. Verifique tamanhos vs. tamanho anterior do arquivo. Se o tamanho não é nem perto, ele está sendo copiado no momento. Esperar; laço nesta etapa até que o tamanho é próximo de tamanho anterior.

  3. Enquanto você não está feito:

    a. Obter o arquivo.

    b. Obter uma listagem de NOVAMENTE. Verifique o tamanho do novo perfil, listagem anterior e seu arquivo. Se eles concordam: você está feito. Se eles não concordam: arquivo alterado enquanto você estava baixando; você não está feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top