複数のリモートサーバーシェルを実行して結果を待つ中央サーバーシェル

複数のリモートサーバーシェルを実行して結果を待つ中央サーバーシェル

私は次のように動作するサーバー制御シェルを作成しました。

  1. 中央サーバーでマスターシェルを実行します。
  2. デフォルトのシェルはスタンバイサーバのリモートシェルを非同期的に呼び出します。
  3. 各代替サーバーシェルは 'サーバーxxx完了'を中央サーバーの同じ結果ファイルに保存します。
  4. その間、マスターシェルは各サーバーが「」を書き込むまで定期的に結果ファイルを読み取ります。完璧'。
  5. その後、マスターシェルはロードバランシングを切り替えます。

しかし、ファイルに書き込んでループに解析するのが理想的な通信方法ではないと思います。

私のシェルの最大の問題は、リモートシェルが書き込みに失敗すると、メインシェルが永遠に待機することです。完璧'理由は何でも。


周囲電圧

システムはCentos7で、マスターシェルはで実行されていますbash。マスターは再起動するたびにサーバーシェルを実行し、フルブートをtomcat待ちます。特定のポートが動作している場合、リモートシェルはコマンドを介してプライマリシェルがssh読み取る結果ファイルを変更します。ただし、サーバーがawk情報を転送および交換する方法は気に入らませんgrep。もっと良い方法があるべきだと思います。


質問

  1. メインシェルがバックグラウンドで複数のリモートシェルを実行している状況で結果データを交換する最良の方法は何ですか?

  2. 上記のワークフローで手順4が成功したときにデフォルトのシェルが無制限に待たずに手順5のみを実行するようにするにはどうすればよいですか?通常のサーバーを再起動する必要はありません。


編集する

マスターシェルはリモートシェルを実行した後、サーバー名を使用してwhileループを実行します。

結果ファイルは次のとおりです。

server1 RUNNING
server2 RUNNING
server3 RUNNING

マスターシェルはserver1server2を grep し、server3状態がRUNNINGFAILEDであるか確認しますDONE

grep の場合、DONEシェルはループからサーバーを削除します。

リモートシェルはtomcatが正常に起動したときにのみ実行されますawk RUNNINGDONE

ベストアンサー1

おすすめ記事