5

Webアプリケーションを更新するスクリプトがあります。Webアプリケーションは2つのサーバーに分散しています。スクリプトの概要は次のとおりです

  1. シェルスクリプトはgitリポジトリを更新します。
  2. シェルスクリプトはアプリケーションサーバーを停止します。
  3. シェルスクリプトはWebサーバーを停止します。
  4. シェルスクリプトは、最新のgitアップデートをチェックアウトするようにアプリケーションサーバーに指示します。
  5. シェルスクリプトは、最新のgitアップデートをチェックアウトするようにWebサーバーに指示します。
  6. シェルスクリプトは、アプリケーションサーバーを起動します。
  7. シェルスクリプトはWebサーバーを起動します。

7つのステップのそれぞれは、同期して次々に実行されます。合計実行時間は約9秒です。ただし、ダウンタイムを減らすために、これらの手順の多くは非同期で実行できます。

たとえば、ステップ4と5を同時に実行できます。手順4と5を非同期で開始したいのですが(バックグラウンドで実行するなど)、両方が完了するまで待ってから先に進む方法がわかりません。

4

3 に答える 3

11

コマンドのグループ化を使用して、同期する必要のあるステップを維持することをお勧めします。

step1
( step2 && step4 && step6 ) &
( step3 && step5 && step7 ) &
wait && echo "all done"
于 2012-08-30T21:59:27.843 に答える
5

スクリプトのバックグラウンドでステップ4と5を起動し(終了&)、ステップ6を実行する前にwaitbashビルトインを呼び出すだけです。

于 2012-08-30T20:04:36.420 に答える
5

あなたはコマンドを探していwaitます。

wait: wait [id]
    Wait for job completion and return exit status.

    Waits for the process identified by ID, which may be a process ID or a
    job specification, and reports its termination status.  If ID is not
    given, waits for all currently active child processes, and the return
    status is zero.  If ID is a a job specification, waits for all processes
    in the job's pipeline.

    Exit Status:
    Returns the status of ID; fails if ID is invalid or an invalid option is
    given.
于 2012-08-30T20:04:49.013 に答える