私は次のように動作するサーバー制御シェルを作成しました。
- 中央サーバーでマスターシェルを実行します。
- デフォルトのシェルはスタンバイサーバのリモートシェルを非同期的に呼び出します。
- 各代替サーバーシェルは 'サーバーxxx完了'を中央サーバーの同じ結果ファイルに保存します。
- その間、マスターシェルは各サーバーが「」を書き込むまで定期的に結果ファイルを読み取ります。完璧'。
- その後、マスターシェルはロードバランシングを切り替えます。
しかし、ファイルに書き込んでループに解析するのが理想的な通信方法ではないと思います。
私のシェルの最大の問題は、リモートシェルが書き込みに失敗すると、メインシェルが永遠に待機することです。完璧'理由は何でも。
周囲電圧
システムはCentos7で、マスターシェルはで実行されていますbash
。マスターは再起動するたびにサーバーシェルを実行し、フルブートをtomcat
待ちます。特定のポートが動作している場合、リモートシェルはコマンドを介してプライマリシェルがssh
読み取る結果ファイルを変更します。ただし、サーバーがawk
情報を転送および交換する方法は気に入らませんgrep
。もっと良い方法があるべきだと思います。
質問
メインシェルがバックグラウンドで複数のリモートシェルを実行している状況で結果データを交換する最良の方法は何ですか?
上記のワークフローで手順4が成功したときにデフォルトのシェルが無制限に待たずに手順5のみを実行するようにするにはどうすればよいですか?通常のサーバーを再起動する必要はありません。
編集する
マスターシェルはリモートシェルを実行した後、サーバー名を使用してwhileループを実行します。
結果ファイルは次のとおりです。
server1 RUNNING
server2 RUNNING
server3 RUNNING
マスターシェルはserver1
、server2
を grep し、server3
状態がRUNNING
、FAILED
であるか確認しますDONE
。
grep の場合、DONE
シェルはループからサーバーを削除します。
リモートシェルはtomcatが正常に起動したときにのみ実行されますawk
RUNNING
。DONE