{ "info": { "author": "Oleg Strizhechenko", "author_email": "oleg.strizhechenko@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "shell-retry\n===========\n\n.. |travis| image:: https://travis-ci.org/strizhechenko/shell-retry.svg?branch=master\n :target: https://travis-ci.org/strizhechenko/shell-retry\n.. |landscape| image:: https://landscape.io/github/strizhechenko/shell-retry/master/landscape.svg?style=flat\n :target: https://landscape.io/github/strizhechenko/shell-retry/master\n.. |pypi| image:: https://badge.fury.io/py/shell-retry.svg\n :target: https://badge.fury.io/py/shell-retry\n.. |license| image:: https://img.shields.io/badge/License-MIT-yellow.svg?colorB=green\n :target: https://opensource.org/licenses/MIT\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/shell-retry.svg?colorB=green\n :target: https://pypi.python.org/pypi/shell-retry\n.. |issues| image:: https://img.shields.io/codeclimate/issues/github/strizhechenko/shell-retry.svg\n :target: https://codeclimate.com/github/strizhechenko/shell-retry/issues\n.. |codeclimate| image:: https://img.shields.io/codeclimate/github/strizhechenko/shell-retry.svg\n :target: https://codeclimate.com/github/strizhechenko/shell-retry\n\n|travis| |landscape| |pypi| |license| |pyversions| |codeclimate| |issues|\n\nWrapper for call any utilities with retries until they succeed\n\nInstall\n-------\n\n.. code:: shell\n\n pip install shell-retry\n\n\nExamples\n--------\n\nLet's start from :code:`--help`:\n\n.. code:: shell\n\n $ shell-retry --help\n usage: shell-retry [-h] [--backoff BACKOFF] [--retry-count RETRY_COUNT]\n [--interval INTERVAL] [--verbose]\n cmd [cmd ...]\n\n\n positional arguments:\n cmd\n\n optional arguments:\n -h, --help show this help message and exit\n --backoff BACKOFF backoff factor (sleep(--interval *= --backoff)\n --retry-count RETRY_COUNT\n How many time re-run cmd if it fails\n --interval INTERVAL Initial interval between retries\n --interval-max INTERVAL_MAX\n upper limit for interval\n --interval-min INTERVAL_MIN\n lower limit for interval\n --verbose Be verbose, write how many retries left and how long\n will we wait\n\n- To debug something use :code:`--verbose` flag.\n- :code:`--retry-count` specifies retry (**not a try**) count.\n- :code:`--interval` sets **initial** interval between retries, interval multiplies with backoff before next retry.\n\n.. code:: shell\n\n $ shell-retry --verbose --retry-count=5 --backoff=1.3 false\n 2018-02-22 18:23:06,682 INFO: Namespace(backoff=1.3, cmd=['false'], interval=1, retry_count=5, verbose=True)\n 2018-02-22 18:23:06,683 INFO: run ['false']\n 2018-02-22 18:23:06,687 INFO: command returned 1\n 2018-02-22 18:23:06,687 INFO: waiting 1.000000 seconds, 5 retries left\n 2018-02-22 18:23:07,687 INFO: run ['false']\n 2018-02-22 18:23:07,692 INFO: command returned 1\n 2018-02-22 18:23:07,692 INFO: waiting 1.300000 seconds, 4 retries left\n 2018-02-22 18:23:08,995 INFO: run ['false']\n 2018-02-22 18:23:08,999 INFO: command returned 1\n 2018-02-22 18:23:08,999 INFO: waiting 1.690000 seconds, 3 retries left\n 2018-02-22 18:23:10,690 INFO: run ['false']\n 2018-02-22 18:23:10,696 INFO: command returned 1\n 2018-02-22 18:23:10,697 INFO: waiting 2.197000 seconds, 2 retries left\n 2018-02-22 18:23:12,896 INFO: run ['false']\n 2018-02-22 18:23:12,902 INFO: command returned 1\n 2018-02-22 18:23:12,903 INFO: waiting 2.856100 seconds, 1 retries left\n 2018-02-22 18:23:15,764 INFO: run ['false']\n 2018-02-22 18:23:15,769 INFO: command returned 1\n\nTo use some flags in :code:`cmd` use :code:`--` before :code:`cmd`.\n\n.. code:: shell\n\n $ shell-retry --retry-count=5 --backoff=1.2 -- curl -m 1 --connect-time 1 http://10.30.33.32\n curl: (28) Connection timed out after 1000 milliseconds\n curl: (28) Connection timed out after 1004 milliseconds\n curl: (28) Connection timed out after 1003 milliseconds\n curl: (28) Connection timed out after 1002 milliseconds\n curl: (28) Connection timed out after 1000 milliseconds\n curl: (28) Connection timed out after 1000 milliseconds\n\nTo limit interval between retries you can use options :code:`--interval-max` and :code:`--interval-min`:\n\n.. code:: shell\n\n $ shell-retry --verbose --retry-count=3 --backoff=1.2 --interval-max=1.2 -- curl -m 1 --connect-time 1 http://10.30.33.32\n 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)\n 2018-02-22 19:21:59,170 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']\n curl: (28) Connection timed out after 1000 milliseconds\n 2018-02-22 19:22:00,184 INFO: command returned 28\n 2018-02-22 19:22:00,185 INFO: waiting 1.000000 seconds, 3 retries left\n 2018-02-22 19:22:01,187 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']\n curl: (28) Connection timed out after 1005 milliseconds\n 2018-02-22 19:22:02,209 INFO: command returned 28\n 2018-02-22 19:22:02,210 INFO: waiting 1.200000 seconds, 2 retries left\n 2018-02-22 19:22:03,414 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']\n curl: (28) Connection timed out after 1001 milliseconds\n 2018-02-22 19:22:04,432 INFO: command returned 28\n 2018-02-22 19:22:04,432 INFO: waiting 1.200000 seconds, 1 retries left\n 2018-02-22 19:22:05,638 INFO: run ['curl', '-m', '1', '--connect-time', '1', 'http://10.30.33.32']\n curl: (28) Connection timed out after 1006 milliseconds\n 2018-02-22 19:22:06,662 INFO: command returned 28\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/strizhechenko/shell-retry", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "shell-retry", "package_url": "https://pypi.org/project/shell-retry/", "platform": "", "project_url": "https://pypi.org/project/shell-retry/", "project_urls": { "Homepage": "https://github.com/strizhechenko/shell-retry" }, "release_url": "https://pypi.org/project/shell-retry/0.0.8/", "requires_dist": null, "requires_python": "", "summary": "Wrapper for call any utilities with retries until they succeed", "version": "0.0.8" }, "last_serial": 3605727, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fd0ef17059e1ea0ff27d9c07b0eec13e", "sha256": "b78a3d33b105d77874b0a7aba0b488969d359459bd0fcf17a403ceb855a708be" }, "downloads": -1, "filename": "shell-retry-0.0.1.tar.gz", "has_sig": false, "md5_digest": "fd0ef17059e1ea0ff27d9c07b0eec13e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1591, "upload_time": "2018-02-22T13:54:18", "url": "https://files.pythonhosted.org/packages/ab/bc/9bd8970c0674480ec669479d9090d19cab822e9f99265b671e7a36273531/shell-retry-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "adc024ca131e7396e0d16bd5b7f3aa7b", "sha256": "77de387db32b3522b01a37ca6f4e17f446c621907959214bc11086e825c0d724" }, "downloads": -1, "filename": "shell-retry-0.0.2.tar.gz", "has_sig": false, "md5_digest": "adc024ca131e7396e0d16bd5b7f3aa7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2397, "upload_time": "2018-02-22T13:59:24", "url": "https://files.pythonhosted.org/packages/2d/0a/309e7574346d643db7a1173d39c2a33e8e86cc020cc1c6117f081243af26/shell-retry-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "1abbe0bb20585797152fdc34f6734f6a", "sha256": "93f4d1a5689ae3da31f38c2991127e29ef0700a8e6bbee065041bd35ed0fb969" }, "downloads": -1, "filename": "shell-retry-0.0.3.tar.gz", "has_sig": false, "md5_digest": "1abbe0bb20585797152fdc34f6734f6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2689, "upload_time": "2018-02-22T14:09:47", "url": "https://files.pythonhosted.org/packages/67/07/5a87c87b4a48aab0d329193638ed9fe405cc49476b5ac11f718dba6f69a2/shell-retry-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "3e9dea39db0bdd5bf37baf3af532336b", "sha256": "b32be919866bb8af0b69e717e4d1e9916d1de44c4dd9a4bbcca64e1f0dc16a8a" }, "downloads": -1, "filename": "shell-retry-0.0.4.tar.gz", "has_sig": false, "md5_digest": "3e9dea39db0bdd5bf37baf3af532336b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2679, "upload_time": "2018-02-22T14:11:36", "url": "https://files.pythonhosted.org/packages/ab/79/1fe42d48a8cc939dcf4ae6c5dec0135161d0cd6f890dfccc1c21c79a4271/shell-retry-0.0.4.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "900619d26cbf9ea76628c8cf79ccd2c8", "sha256": "8bbc08cb4ed0ac512825c25e214417e20bebaf5675cd982e89aa7c33b7e2d81b" }, "downloads": -1, "filename": "shell-retry-0.0.6.tar.gz", "has_sig": false, "md5_digest": "900619d26cbf9ea76628c8cf79ccd2c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3074, "upload_time": "2018-02-22T14:26:00", "url": "https://files.pythonhosted.org/packages/0b/26/f3a9112ae3d4b376deef050e8b9de58db8484aeca36e3fc33963f003ff2c/shell-retry-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "045cfc5d451ca4af558d4709dad70215", "sha256": "cdb545042d5464355ddce6af89a09e444cb271bf1dd6d2e30e4edfd10ca889a6" }, "downloads": -1, "filename": "shell-retry-0.0.7.tar.gz", "has_sig": false, "md5_digest": "045cfc5d451ca4af558d4709dad70215", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3072, "upload_time": "2018-02-22T14:31:27", "url": "https://files.pythonhosted.org/packages/dc/bf/a099dc288f5030845d423ce820f8124b15a2726117212582628576bf9f53/shell-retry-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "78ed63a573149d892ff5834f82d6a7af", "sha256": "e7814151125deb465cb9dd3ef82cb8d732ba62a7c7a3296005de8d5e5713d43d" }, "downloads": -1, "filename": "shell-retry-0.0.8.tar.gz", "has_sig": false, "md5_digest": "78ed63a573149d892ff5834f82d6a7af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3442, "upload_time": "2018-02-22T15:15:52", "url": "https://files.pythonhosted.org/packages/d3/0d/75a82abce7bbf8f02c523a4767bea47655aa9f4af017220bdd37eb010f14/shell-retry-0.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "78ed63a573149d892ff5834f82d6a7af", "sha256": "e7814151125deb465cb9dd3ef82cb8d732ba62a7c7a3296005de8d5e5713d43d" }, "downloads": -1, "filename": "shell-retry-0.0.8.tar.gz", "has_sig": false, "md5_digest": "78ed63a573149d892ff5834f82d6a7af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3442, "upload_time": "2018-02-22T15:15:52", "url": "https://files.pythonhosted.org/packages/d3/0d/75a82abce7bbf8f02c523a4767bea47655aa9f4af017220bdd37eb010f14/shell-retry-0.0.8.tar.gz" } ] }