/ mysqlshareを表示するためのスクリプトはすべてのリストサーバーに存在し、最初の反復のみを実行します。

/ mysqlshareを表示するためのスクリプトはすべてのリストサーバーに存在し、最初の反復のみを実行します。

/mysqlshareすべてのMySQLサーバーから詳細情報を取得する必要があります。ループを使用してスクリプトを作成しましたが、while read最初のサーバーの詳細のみを取得します。

#!/bin/ksh
file="/home/mysqladm/server_list/server_list.txt"
# while loop
while IFS= read -r a
do
        # display line or do something on $line
        output=`ssh $a df -h | grep mysqlshare`
#echo $a,$output
echo $a ,$output >> /home/mysqladm/server_list/output.txt
done < "$file"

server_list.txt次の2つのサーバーを持つファイルがあります。

server_name1,
server_name2,

server_name1に移動してdf -hスクリプトを実行して終了します。ループが機能しないのはなぜですか?

ベストアンサー1

SSH は残りの標準入力をすべて読み取ろうとするので、ループは中断されます。標準入力をnull< /dev/nullなどで接続する必要があります。

これを達成するためにスクリプトを書いた方法は次のとおりです。

#!/bin/bash
IFS=,
file=servers.txt
logfile=log.txt
while read server
do
        ssh $server<<<"df -h | grep mysqlshare" 2>&1>>$logfile
done < $file

おすすめ記事