Advertisement
Guest User

Untitled

a guest
Jul 18th, 2021
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.99 KB | None | 0 0
  1. #!/usr/bin/env sh
  2.  
  3. TIMEOUT=15
  4. INTERVAL=1
  5. QUIET=0
  6.  
  7. echoerr() {
  8.     if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi
  9. }
  10.  
  11. usage() {
  12.     exitcode="$1"
  13.     cat << USAGE >&2
  14. Usage:
  15.   $cmdname host:port [-t timeout] [-- command args]
  16.   -q | --quiet                        Do not output any status messages
  17.   -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout
  18.   -i INTERVAL | --interval=interval   Time in seconds between retries
  19.   -- COMMAND ARGS                     Execute command with args after the test finishes
  20. USAGE
  21.     exit "$exitcode"
  22. }
  23.  
  24. wait_for() {
  25.     local t=$TIMEOUT
  26.  
  27.     while [ $t -gt 0 ] ||  [ $TIMEOUT -eq 0 ]; do
  28.         nc -z "$HOST" "$PORT" > /dev/null 2>&1
  29.  
  30.         result=$?
  31.         if [ $result -eq 0 ] ; then
  32.             if [ $# -gt 0 ] ; then
  33.                 exec "$@"
  34.             fi
  35.             echoerr "$HOST":"$PORT" is available
  36.             exit 0
  37.         fi
  38.         echoerr "$HOST":"$PORT" is not available
  39.         sleep $INTERVAL
  40.         t=$((t-$INTERVAL))
  41.     done
  42.  
  43.     echoerr "Operation timed out"
  44.     exit 1
  45. }
  46.  
  47. while getopts "qt:i:" arg; do
  48.     case "$arg" in
  49.         *:*)
  50.             HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
  51.             PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
  52.             shift 1
  53.             ;;
  54.         -q) # quiet.
  55.             QUIET=1
  56.             shift 1
  57.             ;;
  58.         -t) # timeout. Requires passed value.
  59.             TIMEOUT="$2"
  60.             if [ "$TIMEOUT" = "" ]; then break; fi
  61.             shift 2
  62.             ;;
  63.         -i) # interval. Requires passed value.
  64.             INTERVAL="$2"
  65.             if [ "$INTERVAL" = "" ]; then break; fi
  66.             shift 2
  67.             ;;
  68.         -h) # help.
  69.             usage 0
  70.             ;;
  71.         *)
  72.             echoerr "Unknown argument: $1"
  73.             usage 1
  74.             ;;
  75.     esac
  76. done
  77.  
  78. if [ "$HOST" = "" -o "$PORT" = "" ]; then
  79.     echoerr "Error: Host and port need to be provided."
  80.     usage 2
  81. fi
  82.  
  83. wait_for "$@"
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement