---
name: "retry"
section: "1"
platform: "linux"
package: "retry"
version: "1.0.7-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/retry"
---

# retry(1)

Repeat command until a criteria is met, usually success.

## NAME

**retry** - Repeat command until a criteria is met, usually success.

## SYNOPSIS

```
retry [-v] [-h] [-u until] [-w while] command ...
```

## DESCRIPTION

**The tool repeats the given** *command* *until* **the** *command* **is successful,** **backing off with a configurable delay between each attempt.**

**Retry captures stdin into memory as the data is passed to the repeated** *command***, and this captured stdin is then replayed should the** *command* **be repeated. This makes it possible to embed the retry tool into shell** **pipelines.**

**Retry captures stdout into memory, and if the** *command* **was successful** **stdout is passed on to stdout as normal,** *while* **if the** *command* **was** **repeated stdout is passed to stderr instead. This ensures that output** **is passed to stdout once and once only.**

## OPTIONS

- **-d seconds, --delay=seconds**

  **The number of seconds to back off** **after each attempt. Multiple comma separated** **delays allow subsequent delays to be different,** **with the last delay repeated.**

- **-m message, --message=message**

  **A message to include in the notification** **when repeat has backed off. Defaults to the** *command* **name.**

- **-t times, --times=times**

  **Total number of times to try** **the** *command***. By default we try forever.**

- **-u criteria, --*until*=criteria**

  **Keep repeating the** *command* *until* **any one** **of the comma separated criteria is met.** **Options include 'success', 'true', 'fail',** **’false', an integer or a range of integers.** **Default is 'success'.**

- **-w criteria, --*while*=criteria**

  **Keep repeating the** *command* *while* **any one** **of the comma separated criteria is met.** **Options include 'success', 'true', 'fail',** **’false', an integer or a range of integers.**

- **-h, --help**

  **Display this help message.**

- **-v, --version**

  **Display the version number.**

## RETURN VALUE

**The retry tool returns the return code from the** *command* **being executed, once the criteria is reached.**

**If the** *command* **was interrupted with a signal, the return** **code is the signal number plus 128.**

**If the** *command* **could not be executed, or if the options** **are invalid, the status 1 is returned.**

## EXAMPLES

**In this basic example, we repeat the** *command* **forever.**

```
        ~$ retry --until=success -- false
        retry: 'false' returned 1, backing off for 10 seconds and trying again...
        retry: 'false' returned 1, backing off for 10 seconds and trying again...
        retry: 'false' returned 1, backing off for 10 seconds and trying again...
```

### ^C

**In this more complex example, each invocation of curl is** **retried** *until* **curl succeeds, at which point stdout is** **passed once and once only to the next element in the** **pipeline.**

```
        ~$ retry -- curl --fail http://localhost/entities | \
        jq ... | \
        retry -- curl --fail -X POST http://localhost/resource | \
        logger -t resource-init
```

**In this example, we stagger each delay exponentially** *until* **64 seconds, which is then repeated** *until* **interrupted.**

```
        ~$ retry --until=success --delay "1,2,4,8,16,32,64" -- false
        retry: false returned 1, backing off for 1 second and trying again...
        retry: false returned 1, backing off for 2 seconds and trying again...
        retry: false returned 1, backing off for 4 seconds and trying again...
        retry: false returned 1, backing off for 8 seconds and trying again...
        retry: false returned 1, backing off for 16 seconds and trying again...
        retry: false returned 1, backing off for 32 seconds and trying again...
        retry: false returned 1, backing off for 64 seconds and trying again...
        retry: false returned 1, backing off for 64 seconds and trying again...
        retry: false returned 1, backing off for 64 seconds and trying again...
```

### ^C

**In this example, we try three times before giving up.**

```
        ~$ retry --times=3 -- false
        retry: false returned 1, backing off for 10 seconds and trying again...
        retry: false returned 1, backing off for 10 seconds and trying again...
        retry: false returned 1, giving up.
```

## AUTHOR

**Graham Leggett \<minfrin@sharp.fm\>**
