85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | #!/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() { | ||
|  |  if ! command -v nc >/dev/null; then | ||
|  |     echoerr 'nc command is missing!' | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | 
 | ||
|  |   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 "$@" |