调整 rsync TCP 超时

Eve*_*ert 3 rsync tcp socket

我通过发出命令在我自己的 C++ 程序中使用 rsync system("rsync -rauzvq root@host:/folder");

我用它来保持多个系统同步。

现在我遇到的问题是,当远程主机关闭并且它仍在与我的程序进行 rsync-ing 时,我的程序在 TCP 超时期间挂起。所以我想,我会调整 rsync 套接字的 TCP 超时参数,但我不知道如何(--sockopts 不起作用)。

解决此问题的另一种方法是进行分叉系统调用并检查 rsync pID 在特定超时后是否仍然存在,否则将其杀死。唯一的缺点是我无法检查进程是真正同步还是只是挂在 TCP 超时上?

那么,你们会尝试什么?

Sté*_*las 8

在您的命令行中,rsync 不直接与 TCP 通信,它依赖 ssh 进行传输。

您可以使用:

RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,我使用的最终命令:`rsync -rauzvq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" root@host:/folder .` (2认同)