Ответ 1
Здесь bash фрагмент, который я использую для выполнения экспоненциального отступления:
# Retries a command a configurable number of times with backoff.
#
# The retry count is given by ATTEMPTS (default 5), the initial backoff
# timeout is given by TIMEOUT in seconds (default 1.)
#
# Successive backoffs double the timeout.
function with_backoff {
local max_attempts=${ATTEMPTS-5}
local timeout=${TIMEOUT-1}
local attempt=0
local exitCode=0
while (( $attempt < $max_attempts ))
do
set +e
"[email protected]"
exitCode=$?
set -e
if [[ $exitCode == 0 ]]
then
break
fi
echo "Failure! Retrying in $timeout.." 1>&2
sleep $timeout
attempt=$(( attempt + 1 ))
timeout=$(( timeout * 2 ))
done
if [[ $exitCode != 0 ]]
then
echo "You've failed me for the last time! ([email protected])" 1>&2
fi
return $exitCode
}
Затем используйте его в сочетании с любой командой, которая правильно устанавливает код выхода из строя:
with_backoff curl 'http://monkeyfeathers.example.com/'
Обратите внимание, что как отправлено with_backoff
установит флаг bash "die on error" -e
, который вы можете или не хотите (я хочу.) Удалите две строки set
по желанию.