Add bin
This commit is contained in:
parent
df1a953846
commit
bf8935a2ca
82
bin/bin/retry.sh
Executable file
82
bin/bin/retry.sh
Executable file
@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Retries a command on failure.
|
||||
|
||||
HELP=\
|
||||
"$0: $0 [flags] [options] [--] COMMAND
|
||||
Runs a command, retrying if the command fails
|
||||
|
||||
Arguments:
|
||||
COMMAND The command to run
|
||||
|
||||
Flags:
|
||||
-h, --help Display this message and exit
|
||||
--forever Retry until the command succeeds
|
||||
|
||||
Options:
|
||||
-n, --num-attempts number The maximum number of times to retry the command (default: 10)
|
||||
-d, --delay number The number of seconds to wait between attempts (default: 3)"
|
||||
|
||||
sleep_duration=3
|
||||
num_attempts=10
|
||||
params=""
|
||||
forever=""
|
||||
|
||||
while (( "$#" ));
|
||||
do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
echo "$HELP"
|
||||
exit 0
|
||||
;;
|
||||
--forever)
|
||||
forever=true
|
||||
shift
|
||||
;;
|
||||
-d|--delay)
|
||||
sleep_duration="$2"
|
||||
shift 2
|
||||
;;
|
||||
-n|--num-attempts)
|
||||
num_attempts="$2"
|
||||
shift 2
|
||||
;;
|
||||
--)
|
||||
shift 1
|
||||
params="$params $@"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
params="$params $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
eval set -- "$params"
|
||||
|
||||
retry () {
|
||||
local -r -i max_attempts="$1"; shift
|
||||
local -r cmd="$@"
|
||||
local -i attempt_num=1
|
||||
|
||||
until $cmd
|
||||
do
|
||||
attempt_str="$attempt_num/$max_attempts"
|
||||
if [ "$forever" = true ];
|
||||
then
|
||||
attempt_str="$attempt_num"
|
||||
fi
|
||||
if (( attempt_num == max_attempts )) && [ "$forever" != true ];
|
||||
then
|
||||
echo "Attempt $attempt_str failed. Giving up."
|
||||
return 1
|
||||
else
|
||||
echo "Attempt $attempt_str failed. Retrying in $sleep_duration seconds..."
|
||||
((attempt_num++))
|
||||
sleep "$sleep_duration"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
retry "$num_attempts" "$@"
|
Loading…
Reference in New Issue
Block a user