PDSHを使用して、1つのコマンドラインから複数のサーバーを制御しています。
以下のコマンドは個々のサーバーで正常に機能しますが、PDSH内でexportコマンドを入力すると、エコーバックが空になります。
これがなぜであるか、またはそれを修正する方法についてのアイデアはありますか?
具体例:
これは問題なく機能します。
# export CRAWL_DATE=$(date +%Y%m%d);
# echo $CRAWL_DATE
20131206
ただし、PDSHでは、空白の値がエコーされます。
pdsh> export CRAWL_DATE=$(date +%Y%m%d);
pdsh> echo $CRAWL_DATE;
<IP 1>:
<IP 2>:
次のコマンドを実行すると、正常に機能しているように見えます。
$ pdsh -w root@skinner,root@mulder \
'export CRAWL_DATE=$(date +%Y%m%d); echo $CRAWL_DATE;'
skinner: 20131206
mulder: 20131206
あなたが説明しているように実行すると、これが示されます:
$ pdsh -w root@skinner,root@mulder
pdsh> export CRAWL_DATE=$(date +%Y%m%d);
pdsh> echo $CRAWL_DATE;
skinner:
mulder:
ただし、この方法で実行すると機能します。
pdsh> export CRAWL_DATE=$(date +%Y%m%d); echo $CRAWL_DATE;
skinner: 20131206
mulder: 20131206
考えられる理由は、pdsh
でコマンドを実行し、returnキーを押すたびに、そのコマンドが各ホストでssh
を介して実行されるためです。次に実行されるコマンドは、シェルが異なるまったく異なるssh
セッションで実行されるため、変数は存在しません。
2011年に提出されたこの問題は、私の結論に信憑性を与えていると思います。 問題37:pdshでユーザー定義変数をサポート 。
その号で言及された興味深い回避策がありました、主に:
$ pdsh -w ^hostfile -Rexec ssh -2 -l %u %h '. ~/.pdsh/vars/%h; command'
このメソッドは、変数を含むファイルを利用し、各コマンドはこのファイルをソースできます。. ~/.pdsh/vars/%h
コマンドがリモートで実行されるたび。