Salvar saída para o arquivo local, então rsync --partial --append
nesse arquivo para continuar empurrando para o servidor?
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?
# 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.
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.
Tags ssh persistence buffer