0

rsync を使用してマスター サーバーから複数の子ノードにプッシュするスクリプトを作成しています。私のスクリプトのほとんどはあなたを退屈させるつもりはありません (Ruby の幼少期には特に誇りに思っています) が、Ruby が rsync バイナリを実行するときに問題が発生しています。同じパラメーターを使用してスタンドアロンを rsync しましたが、機能しますが、スクリプトでは機能しません。これが私が得る出力です:

rsync: link_stat "/Shared Items/Share/\#012" が失敗しました: そのようなファイルまたはディレクトリはありません (2)
rsync: push_dir#3 "/Users/ckbrumb/Desktop/Projects/ruby_sync/@/Shared Items/Share" failed: No such file or directory (2)
rsync エラー: 入力/出力ファイルの選択エラー、/SourceCache/rsync/rsync-42/rsync/main.c(580) でのディレクトリ (コード 3) [receiver=2.6.9]
rsync: 接続が予期せず閉じられました (これまでに受信した 8 バイト) [送信者]
rsync エラー: /SourceCache/rsync/rsync-42/rsync/io.c(452) [sender=2.6.9] での rsync プロトコル データ ストリームのエラー (コード 12)

スクリプトのその部分は次のとおりです。

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は私をうんざりさせていますが、それ(エスケープコード?)を追跡することはまだできていません。

「プロトコルデータストリームのエラー」の問題については、Windows でこの rsync 接続が予期せず閉じられるのはなぜですか? これは、rsync がサーバー上の異なる場所にあることに言及しています。私はそれを調べますが、私は 10.8.3 から 10.8.3 に移行しており、バイナリの場所をいじっていないので、それが問題である可能性はほとんどありません。

これについてはまだ調査が必要ですが、スクリプトから rsync を呼び出すときにのみ問題が発生するため、誰かが問題を理解して正しい方向に進めてくれることを願っています。

更新: 少しだけ進歩しました。エラーの最初の部分は、@master_share 変数が文字列を渡す方法が原因です。私はそれを取り出し、共有へのパスを直接引用符で囲んだところ、その時点を過ぎました。パスワードを要求するとハングアップするようになりました。正しいパスワードを受け入れません。最後に、適切なauthorized_keysファイルをセットアップしますが、今のところ、スクリプトの実行中にrsyncがパスワードを要求したときにパスワードを入力するだけです. 入力したパスワードがスクリプトを介して rsync に渡されていない可能性はありますか?

4

0 に答える 0