0

複数の Linux リモート サーバーでコマンドを実行しようとしています。シェル スクリプトを作成しましたが、リモート コマンドを実行できません。スクリプトは構成ファイルからユーザー名と IP を正しく読み取っていますが、リモート コマンドを実行できません。 nohup コマンドが ${interval}、${delay}、および $file.csv の値を渡していません。

interval==${1:-1}
delay=${2:-1800}
b=Server-
c=1
d=-
a=$(date +%Y-%m-%d-%H-%M)
INDEX=0
while read NAMES[${INDEX}] IP[${INDEX}]
do
  ((INDEX=$INDEX+1))
done < config

for (( i=0,j=i+1; i<${INDEX}; i++,j++ ))
do
echo "Server $j Username : "${NAMES[i]}
echo "Server $j IP : "${IP[i]}
file=$b$c$d$a
echo "Server $j file name : "$file
nohup ssh ${NAMES[i]}@${IP[i]} 'vmstat -n ${interval} ${delay} > $file.csv' >& /dev/null &
let c++
done

構成ファイルでは、エントリは「username ip」のようなものです:

ajX 11.22.33.44
mnc 55.66.77.88

スクリプトの実行中にエラーは発生しません。スクリプトの出力は次のとおりです。

Server 1 Username : ajX
Server 1 IP : 11.22.33.44
Server 1 file name : Server-1-2013-09-18-07-39
Server 2 Username : mnc
Server 2 IP : 55.66.77.88
Server 2 file name : Server-2-2013-09-18-07-39

ただし、リモートサーバーではコマンドは実行されませんが、個別に実行すると

nohup ssh ajx@11.22.33.44 'vmstat -n 1 30 > vmfile.csv' >& /dev/null &

それは正常に動作します。nohup は for ループ内で機能しませんか、それとも同じことを行う他の方法がありますか。前もって感謝します。

4

1 に答える 1