- wait-for-it.sh是一个Bash 脚本,它将等待主机和 TCP端口的可用性。它对于同步相互依赖的服务的启动很有用,例如链接的 docker 容器。由于它是一个纯 Bash 脚本,它没有任何外部依赖项。
- 参数:
wait-for-it.sh host:port [-s] [-t timeout] [-- command args]
-h HOST | --host=HOST Host or IP under test
-p PORT | --port=PORT TCP port under test
Alternatively, you specify the host and port as host:port
-s | --strict Only execute subcommand if the test succeeds
-q | --quiet Don’t output any status messages
-t TIMEOUT | --timeout=TIMEOUT
Timeout in seconds, zero for no timeout
– COMMAND ARGS Execute command with args after the test finishes
-
例子:
例如,让我们测试一下是否可以访问 80 端口www.google.com,如果可用,则回显消息google is up。
$ ./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
您可以使用or–timeout=选项设置自己的超时。将超时值设置为 0 将禁用超时:
$ ./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
无论服务是否启动,都会执行子命令。如果您希望仅在服务启动时执行子命令,请添加–strict 参数。在此示例中,我们将测试端口 81,www.google.com该端口将失败:
$ ./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
如果您不想执行子命令,请忽略 - - (双短横线)参数。这样,您可以wait-for-it.sh在自己的脚本中测试退出条件,并确定如何进行:
$ ./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