我使用的笔记本电脑的互联网连接时断时续。 (即我有时一周都没有网络。)我希望我的笔记本电脑上的进程的输出最终出现在我的服务器上。它全部需要到达那里,最终,通过 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 的数据,以防一周的数据填充内核管道缓冲区。
autossh
ssh
如果网络出现故障,则通过杀死/复活它来包装并保持其运行。
这断开连接时丢弃一些数据,但以其他方式工作。我认为数据丢失的原因是ssh
读取它,意识到它无法发送它,然后被杀死autossh
。
我不一定期望数据在重新启动后仍然存在,尽管这将是一个不错的奖励。
答案1
将输出保存到本地文件,然后rsync --partial --append
在该文件上继续将其推送到服务器?