Como faço para garantir que todos os dados para um pipe SSH sejam enviados, apesar das longas desconexões?

3

Estou em um laptop com conectividade de internet intermitente. (por exemplo, às vezes não tenho rede por uma semana.) Eu quero que a saída de um processo no meu laptop seja finalizada no meu servidor. O all precisa chegar lá, eventualmente , através do SSH, e sem que eu precise pensar sobre isso.

Como posso fazer isso?

Caso de teste

# print current date to FIFO every second
while true; do sleep 1; date; done > magic-fifo

Deixe essa execução, desconecte-se da Internet por uma semana (ou o tempo suficiente para ser convincente) e, em seguida, conecte-se novamente. Todos os dados devem ser enviados imediatamente enquanto conectados, mas armazenados em buffer até a reconexão sempre que não estiverem.

Uma tentativa

mkfifo magic-fifo

cat magic-fifo \
| pv --buffer-size 1g --buffer-percent \
| AUTOSSH_POLL=10 AUTOSSH_PORT=50000 autossh user 'cat >> log'

pv está aqui para armazenar em buffer até 1 GiB de dados, caso os dados de uma semana < um href="https://unix.stackexchange.com/questions/11946/how-big-is-the-pipe-buffer"> preenche o buffer do kernel pipe .
autossh envolve ssh e o mantém em funcionamento matando / ressuscitando-o se a rede estiver inoperante .

Isso elimina alguns dados na desconexão , mas funciona de outra forma. Eu presumo que a razão para a perda de dados é que ssh lê, percebe que não pode enviá-lo, e depois é morto por autossh .

Eu não necessariamente espero que os dados persistam durante as reinicializações, embora isso seja um ótimo bônus.

    
por Anko 10.09.2015 / 17:46

1 resposta

3

Salvar saída para o arquivo local, então rsync --partial --append nesse arquivo para continuar empurrando para o servidor?

    
por 10.09.2015 / 17:54