app00、app01などのサーバーに複数のアプリケーションがデプロイされています。 grepとcutを実行するには、これらすべてのサーバーの単一のログファイルをローカルのMacにコピーする必要があります。
このファイルを表示するためにcsshXを使用しましたが、scpに対応するプログラムが見つかりませんでした。私は主に2つが欲しい。
- n台のサーバーに接続してファイルをコピーできます
- ログファイルのサーバーホスト名の前にプレフィックスを追加すると、ローカル命名の競合を防ぐことができます。
どうすればいいですか?
答え1
これは小さなスクリプトでは些細なことです。たとえば、
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
もちろん、名前は好きなように変更できます。
答え2
使用GNUパラレル:
parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on
使用されているソリューションとは異なり、for
これはすべてのダウンロードを並列に実行します。
答え3
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
答え4
これは私にとって効果的です
#!/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"