Estou vendo que alguns clientes ftp não podem ser concluídos ao transferir milhares de arquivos para um servidor FTP. O comando mput *
é executado por várias horas e, em seguida, trava
em
150 Opening BINARY mode data connection.
Não tenho uma maneira fácil de entrar em contato com os administradores do servidor FTP (tudo que tenho é um endereço IP no bloco gerenciado por WeHostWebSites.Com
e sei que esse IP é compartilhado por uma dúzia de nomes de domínio).
O servidor FTP se apresenta como
220 Microsoft FTP Service
Então, suponho que seja o IIS.
Estou executando um mput *
em um diretório que contém milhares de arquivos. Até que a transferência fique parada por algum tempo, até que a conexão de controle seja fechada por inatividade.
Tendo examinado os logs, vejo o seguinte padrão. Inicialmente, os arquivos são transferidos no modo passivo .
229 Entering Extended Passive Mode (|||53567|)
150 Opening BINARY mode data connection.
Em seguida, os números de porta aumentam até atingirem 65200. Nesse ponto, o servidor retorna 501
.
229 Entering Extended Passive Mode (|||65201|)
501 Server cannot accept argument.
O qual aciona os clientes, como lukemftp
(que vem por padrão com instalações do OpenSUSE 11) ou o plug-in FAR do gerenciador FTP (popular entre os usuários do Windows) para alternar para ativo . comece com o comando PORT
.
200 PORT command successful.
150 Opening BINARY mode data connection.
netstat -t
também mostra que novas conexões vão para a porta 20 / tcp do servidor. Depois de transferir outros 3000 arquivos, o comando trava. Neste ponto, a saída de netstat -t
mostra como TIME_WAIT
conexões são drenadas e, em seguida, a conexão de controle é fechada por inatividade.
Solução alternativa: Geralmente, é sugerido usar lftp
para grandes transferências de FTP e isso provou ser uma maneira de contornar o problema. Observando lftp
executando um comando mirror -R
em um diretório com mais de 100.000 arquivos, posso ver como os números dinâmicos da porta são executados até 65200 e depois continuar a partir de 49152 mantendo todas as transferências em passivo. Então, este comando é concluído com sucesso.
Existe uma maneira de contornar esse problema sem o uso de lftp
(em particular, o que poderia ser feito em um cliente do Windows que não possui lftp
?
Aviso: Esta pergunta foi postada há alguns meses no link , mas não recebeu nenhuma resposta e uma votação recente . Eu decidi removê-lo do ServerFault e repassá-lo no SuperUser.