Skip to content
This repository was archived by the owner on May 11, 2022. It is now read-only.
/ try Public archive

♻️ CLI tool based on github.com/kamilsk/retry package to execute commands with retries.

License

Notifications You must be signed in to change notification settings

octolab/try

♻️ retry

Tool to execute terminal commands with retries.

Build Template

💡 Idea

$ retry -limit=3 -backoff=lin:500ms -- curl example.com

Full description of the idea is available here.

🏆 Motivation

...

🤼‍♂️ How to

asciicast

Usage: retry [-timeout Timeout] [--debug] [--notify] [strategy flags] -- command The strategy flags --infinite Infinite creates a Strategy that will never stop repeating. -limit=X Limit creates a Strategy that limits the number of attempts that Retry will make. -delay=Xs Delay creates a Strategy that waits the given duration before the first attempt is made. -wait=Xs,... Wait creates a Strategy that waits the given durations for each attempt after the first. If the number of attempts is greater than the number of durations provided, then the strategy uses the last duration provided. -backoff=:algorithm Backoff creates a Strategy that waits before each attempt, with a duration as defined by the given backoff.Algorithm. -tbackoff=":algorithm :transformation" BackoffWithJitter creates a Strategy that waits before each attempt, with a duration as defined by the given backoff.Algorithm and jitter.Transformation. :algorithm inc:Xs,Ys Incremental creates a Algorithm that increments the initial duration by the given increment for each attempt. lin:Xs Linear creates a Algorithm that linearly multiplies the factor duration by the attempt number for each attempt. exp:Xs,Y Exponential creates a Algorithm that multiplies the factor duration by an exponentially increasing factor for each attempt, where the factor is calculated as the given base raised to the attempt number. binexp:Xs BinaryExponential creates a Algorithm that multiplies the factor duration by an exponentially increasing factor for each attempt, where the factor is calculated as "2" raised to the attempt number (2^attempt). fib:Xs Fibonacci creates a Algorithm that multiplies the factor duration by an increasing factor for each attempt, where the factor is the Nth number in the Fibonacci sequence. :transformation full Full creates a Transformation that transforms a duration into a result duration in [0, n) randomly, where n is the given duration. The given generator is what is used to determine the random transformation. If a nil generator is passed, a default one will be provided. Inspired by https://www.awsarchitectureblog.com/2015/03/backoff.html equal Equal creates a Transformation that transforms a duration into a result duration in [n/2, n) randomly, where n is the given duration. The given generator is what is used to determine the random transformation. If a nil generator is passed, a default one will be provided. Inspired by https://www.awsarchitectureblog.com/2015/03/backoff.html dev:X Deviation creates a Transformation that transforms a duration into a result duration that deviates from the input randomly by a given factor. The given generator is what is used to determine the random transformation. If a nil generator is passed, a default one will be provided. Inspired by https://developers.google.com/api-client-library/java/google-http-java-client/backoff ndist:X NormalDistribution creates a Transformation that transforms a duration into a result duration based on a normal distribution of the input and the given standard deviation. The given generator is what is used to determine the random transformation. If a nil generator is passed, a default one will be provided. Examples: retry -limit=3 -backoff=lin:10ms -- curl http://example.com retry -tbackoff="lin:10s full" --debug -- curl https://example.com retry -timeout=500ms --notify --infinite -- git pull Version 3.0.0 (commit: ..., build date: ..., go version: go1.9, compiler: gc, platform: darwin/amd64) 

Complex example

$ retry -limit=3 -backoff=lin:10ms -- /bin/sh -c 'echo "trying..."; exit 1' trying... #2 attempt at 17.636458ms... trying... #3 attempt at 48.287964ms... trying... error occurred: "exit status 1" $ retry -timeout=500ms --infinite -- /bin/sh -c 'echo "trying..."; exit 1' trying... ... trying... #N attempt at 499.691521ms... error occurred: "context deadline exceeded"

🧩 Installation

Homebrew

$ brew install kamilsk/tap/retry

Binary

$ curl -sSL https://bit.ly/install-retry | sh # or $ wget -qO- https://bit.ly/install-retry | sh

Source

# use standard go tools $ go get -u github.com/kamilsk/retry.cli # or use egg tool $ egg tools add github.com/kamilsk/retry.cli

egg1 is an extended go get.

Bash and Zsh completions

$ retry completion bash > /path/to/bash_completion.d/retry.sh $ retry completion zsh > /path/to/zsh-completions/_retry.zsh

1 The project is still in prototyping.


made with ❤️ for everyone

About

♻️ CLI tool based on github.com/kamilsk/retry package to execute commands with retries.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks