Wrapper for call any utilities with retries until they succeed
Install
pip install shell-retry
Examples
Let’s start from --help:
$ shell-retry --help
usage: shell-retry [-h] [--backoff BACKOFF] [--retry-count RETRY_COUNT]
[--interval INTERVAL] [--verbose]
cmd [cmd ...]
positional arguments:
cmd
optional arguments:
-h, --help show this help message and exit
--backoff BACKOFF backoff factor (sleep(--interval *= --backoff)
--retry-count RETRY_COUNT
How many time re-run cmd if it fails
--interval INTERVAL Initial interval between retries
--interval-max INTERVAL_MAX
upper limit for interval
--interval-min INTERVAL_MIN
lower limit for interval
--verbose Be verbose, write how many retries left and how long
will we wait
To debug something use
--verboseflag.--retry-countspecifies retry (not a try) count.--intervalsets initial interval between retries, interval multiplies with backoff before next retry.
$ shell-retry --verbose --retry-count=5 --backoff=1.3 false
2018-02-22 18:23:06,682 INFO: Namespace(backoff=1.3, cmd=['false'], interval=1, retry_count=5, verbose=True)
2018-02-22 18:23:06,683 INFO: run ['false']
2018-02-22 18:23:06,687 INFO: command returned 1
2018-02-22 18:23:06,687 INFO: waiting 1.000000 seconds, 5 retries left
2018-02-22 18:23:07,687 INFO: run ['false']
2018-02-22 18:23:07,692 INFO: command returned 1
2018-02-22 18:23:07,692 INFO: waiting 1.300000 seconds, 4 retries left
2018-02-22 18:23:08,995 INFO: run ['false']
2018-02-22 18:23:08,999 INFO: command returned 1
2018-02-22 18:23:08,999 INFO: waiting 1.690000 seconds, 3 retries left
2018-02-22 18:23:10,690 INFO: run ['false']
2018-02-22 18:23:10,696 INFO: command returned 1
2018-02-22 18:23:10,697 INFO: waiting 2.197000 seconds, 2 retries left
2018-02-22 18:23:12,896 INFO: run ['false']
2018-02-22 18:23:12,902 INFO: command returned 1
2018-02-22 18:23:12,903 INFO: waiting 2.856100 seconds, 1 retries left
2018-02-22 18:23:15,764 INFO: run ['false']
2018-02-22 18:23:15,769 INFO: command returned 1
To use some flags in cmd use -- before cmd.
$ shell-retry --retry-count=5 --backoff=1.2 -- curl -m 1 --connect-time 1 http://10.30.33.32
curl: (28) Connection timed out after 1000 milliseconds
curl: (28) Connection timed out after 1004 milliseconds
curl: (28) Connection timed out after 1003 milliseconds
curl: (28) Connection timed out after 1002 milliseconds
curl: (28) Connection timed out after 1000 milliseconds
curl: (28) Connection timed out after 1000 milliseconds
To limit interval between retries you can use options --interval-max and --interval-min:
$ shell-retry --verbose --retry-count=3 --backoff=1.2 --interval-max=1.2 -- curl -m 1 --connect-time 1 http://10.30.33.32
2018-02-22 19:21:59,170 INFO: Namespace(backoff=1.2, cmd=['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32'], interval=1, interval_max=1.2, interval_min=None, retry_count=3, verbose=True)
2018-02-22 19:21:59,170 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']
curl: (28) Connection timed out after 1000 milliseconds
2018-02-22 19:22:00,184 INFO: command returned 28
2018-02-22 19:22:00,185 INFO: waiting 1.000000 seconds, 3 retries left
2018-02-22 19:22:01,187 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']
curl: (28) Connection timed out after 1005 milliseconds
2018-02-22 19:22:02,209 INFO: command returned 28
2018-02-22 19:22:02,210 INFO: waiting 1.200000 seconds, 2 retries left
2018-02-22 19:22:03,414 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']
curl: (28) Connection timed out after 1001 milliseconds
2018-02-22 19:22:04,432 INFO: command returned 28
2018-02-22 19:22:04,432 INFO: waiting 1.200000 seconds, 1 retries left
2018-02-22 19:22:05,638 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']
curl: (28) Connection timed out after 1006 milliseconds
2018-02-22 19:22:06,662 INFO: command returned 28
Metadata
Release files for shell-retry 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| shell-retry-0.0.8.tar.gz | 3.4 kB | Without provenance | Details for shell-retry-0.0.8.tar.gz |
Release files / shell-retry-0.0.8.tar.gz
| Download URL | shell-retry-0.0.8.tar.gz |
|---|---|
| Size | 3.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e7814151125deb465cb9dd3ef82cb8d732ba62a7c7a3296005de8d5e5713d43d
|
|
BLAKE2b-256 checksum How to use checksums |
d30d75a82abce7bbf8f02c523a4767bea47655aa9f4af017220bdd37eb010f14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for shell-retry 0.0.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.