feature: add retry
This commit is contained in:
commit
c35da63428
36
retry
Executable file
36
retry
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Retry a command up to a specific numer of times until it exits successfully,
|
||||||
|
# with exponential back off.
|
||||||
|
#
|
||||||
|
# $ retry 5 echo Hello
|
||||||
|
# Hello
|
||||||
|
#
|
||||||
|
# $ retry 5 false
|
||||||
|
# Retry 1/5 exited 1, retrying in 1 seconds...
|
||||||
|
# Retry 2/5 exited 1, retrying in 2 seconds...
|
||||||
|
# Retry 3/5 exited 1, retrying in 4 seconds...
|
||||||
|
# Retry 4/5 exited 1, retrying in 8 seconds...
|
||||||
|
# Retry 5/5 exited 1, no more retries left.
|
||||||
|
|
||||||
|
function retry {
|
||||||
|
local retries=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
local count=0
|
||||||
|
until "$@"; do
|
||||||
|
exit=$?
|
||||||
|
wait=$((2 ** $count))
|
||||||
|
count=$(($count + 1))
|
||||||
|
if [ $count -lt $retries ]; then
|
||||||
|
echo "Retry $count/$retries exited $exit, retrying in $wait seconds..."
|
||||||
|
sleep $wait
|
||||||
|
else
|
||||||
|
echo "Retry $count/$retries exited $exit, no more retries left."
|
||||||
|
return $exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
retry "$@"
|
Loading…
x
Reference in New Issue
Block a user