尽管长时间断开连接,如何确保将所有数据发送到 SSH 管道?

尽管长时间断开连接,如何确保将所有数据发送到 SSH 管道?

我使用的笔记本电脑的互联网连接时断时续。 (即我有时一周都没有网络。)我希望我的笔记本电脑上的进程的输出最终出现在我的服务器上。它全部需要到达那里,最终,通过 SSH,而无需我考虑。

我怎样才能做到这一点?


测试用例

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

保持其运行,断开与互联网的连接一周(或足够长的时间以令人信服),然后重新连接。所有数据应在连接时立即发送,但在未连接时进行缓冲直至重新连接。

一次尝试

mkfifo magic-fifo

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

pv只是在这里缓冲最多 1 GiB 的数据,以防一周的数据填充内核管道缓冲区
autosshssh如果网络出现故障,则通过杀死/复活它来包装并保持其运行。

断开连接时丢弃一些数据,但以其他方式工作。我认为数据丢失的原因是ssh读取它,意识到它无法发送它,然后被杀死autossh


我不一定期望数据在重新启动后仍然存在,尽管这将是一个不错的奖励。

答案1

将输出保存到本地文件,然后rsync --partial --append在该文件上继续将其推送到服务器?

相关内容