Shellはscpを使用して複数のサーバーからデータを抽出します。

Shellはscpを使用して複数のサーバーからデータを抽出します。

私はシェルの世界に初めてアクセスし、300を超えるサーバーからファイルをインポートする簡単なスクリプトを書いています。以下のように作成すると、一度に300個のサーバーにすべてログインしてファイルを抽出するか、1つずつ抽出するようになります。また、ユーザーにパスワードのないログインを提供することもできます。$ usernameでユーザーに言及するか、別のスクリプトを作成する必要があります。

#!/bin/bash
cd /backup
for server in $(cat server.txt)
do
scp -r  $username@$server:/tmp/backup/*.txt* .
done

答え1

このように書いたら、一つずつ見てください。

parallel並行して実行するには、見てください(パッケージをインストールする必要があるかもしれません)。また、一度に300のジョブをすべて実行せずに、同時実行数を制限してください。それ以外の場合は、全体の操作が遅くなります。

パスワードなしでログインできます。 SSHキーペアを作成し、それを実行するマシンに秘密キーを入力し、複製するすべての300マシンに公開scpキーを入力する必要があります。~/.ssh/authorized_keysキーが正しい位置にある場合、スクリプトを変更する必要はありません。

答え2

dirktが言ったように、これは各コマンドを順番に実行します。つまり、最初のコマンドが完了するまで、次のコピーは開始されません。

スクリプトを合理的な時間内に実行するには、次&のように行またはコードブロック(中括弧内)の末尾に文字を追加してバックグラウンドでコマンドを実行し、すぐに次のコマンドを開始できます。

#!/bin/bash

for server in $(cat server.txt); do
    scp -r  $username@$server:/tmp/backup/*.txt* /backup/ &
done

関連情報