Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Wait for an HTTP endpoint to return 200 OK with Bash and curl
bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9000)" != "200" ]]; do sleep 5; done'
# also check https://gist.github.com/rgl/c2ba64b7e2a5a04d1eb65983995dce76
@wilk

This comment has been minimized.

Copy link

wilk commented Mar 14, 2019

timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9000)" != "200" ]]; do sleep 5; done' || false

version with 5 minutes of timeout: if timeout is reached, it exits with error (1)

@neonidian

This comment has been minimized.

Copy link

neonidian commented May 10, 2019

For TLS add --insecure flag for self signed certificates
timeout 300 bash -c 'while [[ "$(curl --insecure -s -o /dev/null -w ''%{http_code}'' https://localhost:9000)" != "200" ]]; do sleep 5; done'

@bukowa

This comment has been minimized.

Copy link

bukowa commented Jan 21, 2020

How to print status code before sleep?

@aaronArinder

This comment has been minimized.

Copy link

aaronArinder commented Jan 24, 2020

This is awesome--thanks!

@bukowa

This comment has been minimized.

Copy link

bukowa commented Jan 26, 2020

Here a script with timeout

#!/bin/bash
set -eux

declare -r HOST="http://google.com"

wait-for-url() {
    echo "Testing $1"
    timeout -s TERM 45 bash -c \
    'while [[ "$(curl -s -o /dev/null -L -w ''%{http_code}'' ${0})" != "200" ]];\
    do echo "Waiting for ${0}" && sleep 2;\
    done' ${1}
    echo "OK!"
    curl -I $1
}
wait-for-url http://${HOST}
@snoby

This comment has been minimized.

Copy link

snoby commented May 4, 2020

Here a script with timeout

#!/bin/bash
set -eux

declare -r HOST="http://google.com"

wait-for-url() {
    echo "Testing $1"
    timeout -s TERM 45 bash -c \
    'while [[ "$(curl -s -o /dev/null -L -w ''%{http_code}'' ${0})" != "200" ]];\
    do echo "Waiting for ${0}" && sleep 2;\
    done' ${1}
    echo "OK!"
    curl -I $1
}
wait-for-url http://${HOST}

Testing http://localhost:8000
-bash: timeout: command not found
OK!
i don't think that the timeout command is on macOS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.