応答しないサーバーをスキップする方法

応答しないサーバーをスキップする方法

複数のサーバーで実行されるスクリプトを作成しました。時々、スクリプトがサーバーの1つで停止してプロセスを終了するには、Ctrl Cを押す必要があります。それ以外の場合は停止して接続を続行します。

スクリプトの実行中にサーバーがハングまたは応答しない場合は、スクリプトが次のホストに移動して実行を継続できるように、そのホストをスキップする方法はありますか?通常、コントロールCを押すとプロセス全体が終了します。

以下はスクリプトの例です。マシン3に停止しているとします。

HOSTS=(MACHINE1 MACHINE2 MACHINE3 MACHINE4 MACHINE5)
for i in "${HOSTS[@]}"
do
  echo "$i"
  ssh -q "$i" uname -a
 done

スクリプトはOS Xで実行されています。コマンドを試しましたが、timeout残念ながら機能しません。

ベストアンサー1

直接実行して間違っている可能性があるすべての問題(ホスト応答なし、ホストが途中で応答を停止する、ユーザーがCtrl + Cを押す、エラーを報告するなど)を処理する必要がある代わりに、次のいずれかを使用してください。多くの既存のツールは、SSHを介して複数のシステムでコマンドを実行できます。

mussh -t 4 -H <(printf '%s\n' "${HOSTS[@]}") -c 'uname -a'
pssh -t 4 -h <(printf '%s\n' "${HOSTS[@]}") uname -a
pdsh -u 4 -w "$(printf %s, "${HOSTS[@]}")" 'uname -a'

おすすめ記事