Adjusting rsync TCP timeout
In your command line, rsync is not talking TCP directly, it's relying on ssh for the transmission.
You can use:
RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...
Related videos on Youtube
Evert
Updated on September 18, 2022Comments
-
Evert over 1 year
I'm using rsync in my own C++ program by issueing the command
system("rsync -rauzvq root@host:/folder");
I use this for keeping multiple systems in sync.
Now I have the problem that when a remote host shuts off and there it was still rsync-ing with my program, my program hangs for the period of the TCP timeout. So I thought, I would adjust the TCP timeout parameter for the rsync socket, but I can't figure out how (--sockopts isn't working).
Another way of fixing this would involve making a forked system call and check whether the rsync pID still exists after a certain timeout, otherwise kill it. Only downside on this is that I can't check whether the process is genuinely syncing or just hanging on a TCP timeout?
So, what would you guys try?
-
Admin over 11 yearsdid you try the --timeout parameter? from the man page: --timeout=TIMEOUT This option allows you to set a maximum IO timeout in seconds. If no data is transferred for the specified time then rsync will exit. The default is 0, which means no timeout.
-
Admin over 11 yearsthe timeout parameter is just for I/O requests (e.g. hard-disk access etc.), not TCP requests.
-
-
Evert over 11 yearsGood answer, final command I used:
rsync -rauzvq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" root@host:/folder .