App00、app01などのサーバーにアプリケーションを複数デプロイしています。これらのすべてのサーバーからローカルMacに1つのログファイルをコピーする必要があるので、grepとカットを実行できます。
このファイルの表示にcsshXを使用しましたが、scpに相当するものを見つけることができません。私は基本的に2つのことを望みます。
どうすればよいですか?
これは、小さなスクリプトで行うのは簡単です。例えば:
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
などになります。名前を自由に変更できます。
GNU parallel を使用:
parallel -j0 scp {}:/remote_path file_from_{} ::: Host1 Host2 Host3 # and so on
for
を使用するソリューションとは異なり、これはすべてのダウンロードを並行して実行します
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
これは私のために働いた
#!/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"
Pythonを使用できる場合は、ファブリックと呼ばれるマシン管理のようなタスクを簡略化するための興味深いモジュールがあります。 http://docs.fabfile.org/en/latest/tutorial.html
私はそれを使いたかったが、それを回避していません