複数のサーバーからローカルシステムにファイルをコピーするにはどうすればよいですか?


11

app00、app01などのサーバーにアプリケーションを複数デプロイしています。これらすべてのサーバーからローカルMacに1つのログファイルをコピーする必要があるので、いくつかのgreppingとcutを実行できます。

このファイルの表示にcsshXを使用しましたが、scpに相当するものを見つけることができません。私は基本的に2つのことを望みます。

  1. n台のそのようなサーバーに接続してファイルをコピーする機能
  2. ログファイルの先頭にサーバーホスト名を付けることにより、ローカルで名前の競合を回避します。

どうすればいいですか?


1
私はおそらく自分でスクリプトを書くでしょう。それはオプションではありませんか?
Bernhard、

私は今ベルンハルトをやっています。:)これについてもcsshXのようなものがあったらいいのにと思っていました。
Gaurav

回答:


18

これは、小さなスクリプトで行うのは簡単です。例えば:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done

上記は、各サーバーからファイルを順番にコピーし、それに名前を付けSERVERNAME_fileます。したがって、からのファイルは次のapp0ようになりますapp0_file。名前を自由に変更できます。


3
コマンド&の最後にscpa waitを最後に置くと、追加コストなしで同時実行が可能になります。
l0b0

3
@ l0b0それが必要かどうかわかりません。コピーに失敗したファイルがあるかどうか、およびどのファイルをコピーできなかったかを知ることができるので、このアプローチが好きです。でも良いヒント、ありがとう。
terdon


5
remote_path="/path/to/file"
local_target_dir="/path/to/dir"
hosts=(app00 app01)
for host in "${hosts[@]}"; do
    scp "$host":"$remote_path" "$local_target_dir"/filename."$host"
done

どうもありがとう、私はbashプログラミングに不慣れで、そのようなものを書きました。:)
Gaurav


0

これは私のために働いた

#!/bin/bash
#Expect script
/usr/bin/expect -<<EOD 

set SERVERS {1 2 3 .. N}

foreach SERVER \$SERVERS {
    spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log
    expect {
      -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
      }
      -re ".*sword.*" {
        exp_send "pswrd\r"
      }
    }
    expect eof 
}
EOD

echo "completed"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.