You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
2.0 KiB
Markdown
46 lines
2.0 KiB
Markdown
9 years ago
|
= Wait for it
|
||
|
|
||
|
wait-for-it.sh is a pure bash script that wait on the availability of a host and TCP port. It is useful for synchronizing the spin-up of interdependent services, such as linked docker containers. Since it is a pure bash script, it does not have any external dependencies.
|
||
|
|
||
|
For example, let's test to see if we can access port 80 on www.google.com, and if it is available, echo the message "Let's start googling!"
|
||
|
|
||
|
```
|
||
|
$ ./wait-for-it.sh www.google.com:80 -- echo "google is up"
|
||
|
wait-for-it.sh: waiting 15 seconds for www.google.com:80
|
||
|
wait-for-it.sh: www.google.com:80 is available after 0 seconds
|
||
|
google is up
|
||
|
```
|
||
|
|
||
|
You can set your own timeout with the `-t` or `--timeout=` option. Setting the timeout value to 0 will disable the timeout:
|
||
|
|
||
|
```
|
||
|
$ ./wait-for-it.sh -t 0 www.google.com:80 -- echo "google is up"
|
||
|
wait-for-it.sh: waiting for www.google.com:80 without a timeout
|
||
|
wait-for-it.sh: www.google.com:80 is available after 0 seconds
|
||
|
google is up
|
||
|
```
|
||
|
|
||
|
The subcommand will be executed regardless if the service is up or not. If you wish to only execute the subcommand only if the service is up, add the `--strict` argument. In this example, we will test port 81 on www.google.com which will fail:
|
||
|
|
||
|
```
|
||
|
$ ./wait-for-it.sh www.google.com:81 --timeout=1 --strict -- echo "google is up"
|
||
|
wait-for-it.sh: waiting 1 seconds for www.google.com:81
|
||
|
wait-for-it.sh: timeout occurred after waiting 1 seconds for www.google.com:81
|
||
|
wait-for-it.sh: strict mode, refusing to execute subprocess
|
||
|
```
|
||
|
|
||
|
If you don't want to execute a subcommand, leave off the `--` argument. This way, you can test the exit condition of `wait-for-it.sh` in your own scripts, and determine how to proceed:
|
||
|
|
||
|
```
|
||
|
$ ./wait-for-it.sh www.google.com:80
|
||
|
wait-for-it.sh: waiting 15 seconds for www.google.com:80
|
||
|
wait-for-it.sh: www.google.com:80 is available after 0 seconds
|
||
|
$ echo $?
|
||
|
0
|
||
|
$ ./wait-for-it.sh www.google.com:81
|
||
|
wait-for-it.sh: waiting 15 seconds for www.google.com:81
|
||
|
wait-for-it.sh: timeout occurred after waiting 15 seconds for www.google.com:81
|
||
|
$ echo $?
|
||
|
124
|
||
|
```
|