3 changed files with 84 additions and 0 deletions
@ -0,0 +1,79 @@
|
||||
#!/bin/sh |
||||
|
||||
TIMEOUT=15 |
||||
QUIET=0 |
||||
|
||||
echoerr() { |
||||
if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi |
||||
} |
||||
|
||||
usage() { |
||||
exitcode="$1" |
||||
cat << USAGE >&2 |
||||
Usage: |
||||
$cmdname host:port [-t timeout] [-- command args] |
||||
-q | --quiet Do not 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 |
||||
USAGE |
||||
exit "$exitcode" |
||||
} |
||||
|
||||
wait_for() { |
||||
for i in `seq $TIMEOUT` ; do |
||||
nc -z "$HOST" "$PORT" > /dev/null 2>&1 |
||||
|
||||
result=$? |
||||
if [ $result -eq 0 ] ; then |
||||
if [ $# -gt 0 ] ; then |
||||
exec "$@" |
||||
fi |
||||
exit 0 |
||||
fi |
||||
sleep 1 |
||||
done |
||||
echo "Operation timed out" >&2 |
||||
exit 1 |
||||
} |
||||
|
||||
while [ $# -gt 0 ] |
||||
do |
||||
case "$1" in |
||||
*:* ) |
||||
HOST=$(printf "%s\n" "$1"| cut -d : -f 1) |
||||
PORT=$(printf "%s\n" "$1"| cut -d : -f 2) |
||||
shift 1 |
||||
;; |
||||
-q | --quiet) |
||||
QUIET=1 |
||||
shift 1 |
||||
;; |
||||
-t) |
||||
TIMEOUT="$2" |
||||
if [ "$TIMEOUT" = "" ]; then break; fi |
||||
shift 2 |
||||
;; |
||||
--timeout=*) |
||||
TIMEOUT="${1#*=}" |
||||
shift 1 |
||||
;; |
||||
--) |
||||
shift |
||||
break |
||||
;; |
||||
--help) |
||||
usage 0 |
||||
;; |
||||
*) |
||||
echoerr "Unknown argument: $1" |
||||
usage 1 |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
if [ "$HOST" = "" -o "$PORT" = "" ]; then |
||||
echoerr "Error: you need to provide a host and port to test." |
||||
usage 2 |
||||
fi |
||||
|
||||
wait_for "$@" |
Loading…
Reference in new issue