Ruby脚本中rsync二进制文件的问题

时间:2013-05-12 13:42:20

标签: ruby rsync

我正在编写一个脚本,它将利用rsync从主服务器推送到多个子节点。我不会厌烦你的大部分脚本(虽然在我的Ruby婴儿期我为此特别自豪),但是当Ruby运行rsync二进制文件时我遇到了一个问题。我使用相同的参数独立rsync并且它可以工作,但是不能通过脚本工作。这是我得到的输出:

rsync: link_stat "/Shared Items/Share/\#012" failed: No such file or directory (2)
rsync: push_dir#3 "/Users/ckbrumb/Desktop/Projects/ruby_sync/@/Shared Items/Share" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at /SourceCache/rsync/rsync-42/rsync/main.c(580) [receiver=2.6.9]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9]

这是剧本的一部分:

def perform_sync

    File.foreach(@filename) do |line|

        serv_path_array = line.split(":")
        shr_server = serv_path_array[0]
        shr_path = serv_path_array[1]
        shr_user = serv_path_array[2]

        `rsync -avrpogz --delete -e ssh "#{@master_share}" "#{shr_user}@#{shr_server}:#{shr_path}"` 
    end
end

@master_share是一个初始化变量集,它通过读取脚本在首次运行期间放置的第一行首选项文件来设置。它在所有测试中返回正确的路径。对于目标共享(shr_user@shr_server:shr_path),该文件的其余行的格式如下:<serverName>:<user>:<path>。脚本将此行拆分为:作为分隔符,并根据数组中的关联位置设置变量。

对于错误的第一行,我已经尝试过两个都没有\来逃避空间,并且在两种情况下都保持原样相同的结果。 \#012让我失望,但我还是无法跟踪(逃脱码?)。

对于“协议数据流错误”问题,我确实看到Why is this rsync connection unexpectedly closed on Windows?提到rsync位于服务器上的不同位置。我会调查一下,然而,我将从10.8.3变为10.8.3,并且我没有弄乱任何二进制位置,所以这几乎是不可能的。这就是问题。

我还有一些研究要做,但是这个问题只有在从我的脚本调用rsync时才存在,我希望有人看到问题是什么,并且可以把我推向正确的方向。

更新:刚刚取得了一些进展。错误的第一部分是因为@master_share变量如何传递字符串。我把它拿出来并直接在引号中放入共享的路径,它已经过了那一点。现在它在要求输入密码时挂断了。不接受正确的密码。最后我将设置一个合适的authorized_keys文件,但是现在我只是在脚本运行时rsync要求输入密码。我输入的密码是否可能没有通过脚本传递给rsync?

0 个答案:

没有答案