Ajustando o tempo limite do TCP do rsync

2

Estou usando o rsync em meu próprio programa C ++, emitindo o comando system("rsync -rauzvq root@host:/folder");

Eu uso isso para manter vários sistemas em sincronia.

Agora eu tenho o problema que quando um host remoto é desligado e lá ainda está rsync-ing com o meu programa, meu programa trava para o período de tempo limite do TCP. Então eu pensei, eu ajustaria o parâmetro TCP timeout para o soquete rsync, mas não consigo descobrir como (o --sockopts não está funcionando).

Outra maneira de corrigir isso envolve fazer uma chamada de sistema bifurcada e verificar se o pid de rsync ainda existe após um determinado tempo limite, caso contrário, mate-o. A única desvantagem disso é que eu não posso verificar se o processo está realmente sincronizando ou apenas pendurado em um tempo limite de TCP?

Então, o que vocês tentariam?

    
por Evert 04.10.2012 / 15:24

1 resposta

5

Na sua linha de comando, o rsync não está falando diretamente do TCP, está confiando no ssh para a transmissão.

Você pode usar:

RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...
    
por 04.10.2012 / 16:01