Atualização: Como o tempo limite parece acontecer quando o rsync está criando as somas de verificação, aqui estão algumas abordagens diferentes que podem funcionar.
Primeiro, para manter apenas um rsync aberto, você pode (além das opções mencionadas por Michael Kjörling) brincar com a opção --sockopts
. Isso lhe dá a capacidade de definir o mesmo tipo de opções de soquete que você pode definir ao criar um soquete no código, por exemplo, SO_RCVTIMEOUT=0
para desativar os tempos limite para receber dados.
Em segundo lugar, a opção --progress-file
pode ser suficiente para não acionar o tempo limite, enviando continuamente informações de progresso
Em terceiro lugar, você pode fazer uma sincronização arquivo por arquivo, por exemplo, assim:
for i in ls /path/to/dir; do rsync -ca $i remoteserver:/path/to/dir; done
Em quarto lugar, você poderia usar o ssh como seu mecanismo de transferência e usar suas opções TCPKeepAlive
e ServerAliveInterval
/ ServerAliveCountMax
de alguma maneira adequada para manter a conexão ativa.
Resposta original:
O rsync já faz uma abordagem arquivo por arquivo - ele verificará cada arquivo na lista de arquivos a serem sincronizados e sincronizará apenas aqueles que não existirem no sistema de destino ou que sejam diferente daqueles arquivos no sistema de destino.
O que você pode fazer para reduzir o tempo de transferência é usar a opção -z
que será compactada durante o transporte e a sinalização --partial
para que, se a transferência for interrompida, você mantenha qualquer arquivo parcialmente sincronizado para que o rsync pode continuar onde estava. Também as opções --timeout e --contimeout que Michael Kjörling mencionou provavelmente seriam úteis.