長い間切断されたにもかかわらず、すべてのデータがSSHパイプに転送されるようにするにはどうすればよいですか?

長い間切断されたにもかかわらず、すべてのデータがSSHパイプに転送されるようにするにはどうすればよいですか?

私が使用しているラップトップのインターネット接続が断続的に切断されます。 (つまり、週にインターネットがない場合もあります。)ラップトップのプロセス出力が私のサーバーに表示されるようにしたいです。それみんなそこに行かなければならない、最後に、それについて考える必要なしにSSHによって。

どうすればいいですか?


テストケース

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

実行したままにして、1週間(または説得力があるほど長い間)インターネットを切断して再接続します。すべてのデータは接続されたらすぐに送信する必要がありますが、接続されていない場合は再接続されるまでバッファリングする必要があります。

1回の試み

mkfifo magic-fifo

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

pv1週間分のデータがある場合に備えて、ここで最大1GiBのデータをバッファリングしてください。カーネルパイプバッファの充填
autosshsshネットワークが停止したら、それを終了して終了/復活させて実行し続けます。

これ切断時に一部のデータを削除しかし、他の方法で動作します。データ損失の原因は、sshそれを読み、送信できないことに気づき、殺されることだと思いますautossh


再起動後もデータが保持されるとは思いませんが、これは良いボーナスになります。

答え1

出力をローカルファイルに保存してから、ファイルを続行してrsync --partial --appendサーバーにプッシュしますか?

関連情報