docs Documentation Status
Travis-CI Build Status Requirements Status
Coverage Status
PyPI Package latest release PyPI Wheel Supported versions Supported implementations
Commits since latest release

A tool to wait for services and execute command. Useful for Docker containers that depend on slow to start services (like almost everything).

  • Free software: BSD 2-Clause License


Currently holdup is only published to PyPI and hub.docker.com.

To install from PyPI:

pip install holdup

It has no dependencies except the optional PostgreSQL check support, which you’d install with:

pip install 'holdup[pg]'

You can also install the in-development version with:

pip install https://github.com/ionelmc/python-holdup/archive/master.zip

Alternate installation (Docker image)


docker run --rm ionelmc/holdup tcp://foobar:1234

Note that this will have some limitations:

  • executing the command is pretty pointless because holdup will run in its own container
  • you’ll probably need extra network configuration to be able to access services
  • you won’t be able to use docker run inside a container without exposing a docker daemon in said container


usage: holdup [-h] [-t SECONDS] [-T SECONDS] [-i SECONDS] [-n] service [service …] [– command [arg [arg …]]]

Wait for services to be ready and optionally exec command.

positional arguments:
A service to wait for. Supported protocols: “tcp://host:port/”, “path:///path/to/something”, “unix:///path/to/domain.sock”, “eval://expr”, “pg://user:password@host:port/dbname” (“postgres” and “postgresql” also allowed), “http://urn”, “https://urn”, “https+insecure://urn” (status 200 expected for http*). Join protocols with a comma to make holdup exit at the first passing one, eg: “tcp://host:1,host:2” or “tcp://host:1,tcp://host:2” are equivalent and mean any that pass.
An optional command to exec.
optional arguments:
-h, --help show this help message and exit
-t SECONDS, --timeout SECONDS
 Time to wait for services to be ready. Default: 60.0
-T SECONDS, --check-timeout SECONDS
 Time to wait for a single check. Default: 1.0
-i SECONDS, --interval SECONDS
 How often to check. Default: 0.2
-v, --verbose Verbose mode.
 Disable PostgreSQL/HTTP password masking.
-n, --no-abort Ignore failed services. This makes holdup return 0 exit code regardless of services actually responding.
--insecure Disable SSL Certificate verification for HTTPS services.
--version display the version of the holdup package and its location, then exit.


holdup tcp://foobar:1234 -- django-admin ...


To run all the tests run:


Note, to combine the coverage data from all the tox environments run:

set PYTEST_ADDOPTS=--cov-append
PYTEST_ADDOPTS=--cov-append tox