複数のサーバーで実行されるスクリプトを作成しました。時々、スクリプトがサーバーの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'
…