RSYNC 通过 SSH 定期失败,管道损坏

RSYNC 通过 SSH 定期失败,管道损坏

提交后脚本调用命令rsync将文件从 SVN 系统更新到生产 Web 服务器,两者都运行 Ubuntu 10.04.3、3.1.1 rsyncrsync3.0.7 也出现过此问题,升级到 3.1.1 是一个故障排除步骤。

无论文件是否需要更新,我都会定期收到:

Write Failed: Broken pipe
rsync: connection unexpectedly closed (xxxx bytes sent so far) [sender]

当管道中断时,非常详细的输出 99% 的时间结束于:

send_files(2, /some/path/to/.htaccess)
send_files(3, /some/path/to/file1.zip)
send_files(4, /some/path/to/file2.zip)
send_files(5, /some/path/to/file3.zip)
send_files(6, /some/path/to/file4.zip)
send_files(7, /some/path/to/index.php)
recv_files(22) starting
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(255)

SSH并且SCP连接保持活动并在两台服务器上正常工作,没有问题。如果我rsync连续运行该命令 10 次,大约 50% 的时间它运行得很好。从所有目录传输文件都会出现此症状,因此我认为这不是某种文件类型或权限问题。

更多输出:

send_files(27, /a/different/path/verdana.ttf)
recv_files(50) starting
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(255)

send_files(25, /yet/another/path/unsubscribe.htm)
recv_files(162) starting
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(255)

以下是该命令的示例:

rsync -azv --delete --exclude=.svn /svn/path -e ssh user@server:/remote/path

答案1

您提到每当失败时您都会看到 TCP RST 数据包。这听起来类似于下一篇文章中提到的防火墙可能断开连接的问题,该问题也可以通过重新使用挂起的 ssh 连接来解决。 rsync 连接关闭大约一个小时

还有一个 --timeout=[超时值] 选项,但我认为它不如挂起的 ssh 连接解决方​​案。

相关内容