0

私の使用例は、複数のサーバーでコマンドをリモートで実行することです。ホスト間に信頼を設定しました。

したがって、次のようなコマンドが 1 つあります: COMMAND 1:

for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'Place Ur command Here' > foo.out 2> foo.err < /dev/null &"; done

コマンド 2:

rm -rf /floderPath

これら2つを組み合わせると(コマンド1 +コマンド2)、正常に動作し、後続のフォルダーがすべてのホストから削除されます。

for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'rm -rf /floderPath' > foo.out 2> foo.err < /dev/null &";done

今、私は別のコマンドを持っています。このコマンドをすべてのホストで個別に実行すると、正常に動作し、すべての Java プロセスが強制終了されます。コマンド 3:

for i in `ps -ef | grep -v grep | grep java | awk '{print $2}'`; do kill -9 $i; echo "Process id $i is killed"; done

しかし、COMMAND 1 と COMMAND 3 を組み合わせると、まったく機能しません。ここでやろうとしているのは、すべてのホストですべての JAVA プロセスを強制終了することです。

for i in 11 12 13 14 15 16; do echo host-name-dev-$i; ssh -q host-name-dev-$i "nohup bash -c 'for j in `ps -ef | grep -v grep | grep java | awk '{print $2}'`; do kill -9 $j; echo "Process id $j is killed"; done' > foo.out 2> foo.err < /dev/null &";done

引用符が不適切に使用されている可能性があると推測できますが、さまざまな組み合わせを試しましたが、うまくいきませんでした。私はスクリプト作成の経験があまりないので、明らかなエラーについてはご容赦ください。

4

2 に答える 2

0

次の引用はうまくいくはずだと思います...

for i in 11 12 13 14 15 16; do
  echo host-name-dev-$i
  ssh -q host-name-dev-$i "nohup bash -c \"for j in \\\`ps -ef | grep -v grep | grep java | awk '{print \\\$2}'\\\`; do kill -9 \\\$j; echo \\\"Process id \\\$j is killed\\\"; done\" > foo.out 2> foo.err < /dev/null &"
done

更新:エスケープ文字の量を超えて自殺しないでください。

于 2013-10-18T05:01:27.590 に答える