5

I have a script which updates a web application. The web application is spread across 2 servers. Here is a rundown of the script

  1. The shell script updates the git repository.
  2. The shell script stops the application server.
  3. The shell script stops the web server.
  4. The shell script instructs the application server to checkout the latest git update.
  5. The shell script instructs the web server to checkout the latest git update.
  6. The shell script starts the application server.
  7. The shell script starts the web server.

Each of the 7 steps are done one after the other synchronously. The total run time is approximately 9 seconds. To reduce downtime however, many of these steps could be done asynchronously.

For example, step 4 and 5 could be done at the same time. I want to start step 4 and 5 asynchronously (e.g. running in the background), but I cannot find how to wait until they are both completed before going further.

3 Answers 3

11

You might want to use command grouping to maintain which steps need to be synchronous:

step1
( step2 && step4 && step6 ) &
( step3 && step5 && step7 ) &
wait && echo "all done"
Sign up to request clarification or add additional context in comments.

Comments

5

launch step 4 and 5 in background in your script (ending &), then simply call wait bash builtin before running step 6

Comments

5

You are looking for the wait command.

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.