Skip to main content

A plugin for Supervisor that allows starting up services after dependent services have reached specific states. Based on ordered-startup-supervisord by Jason Corbett

Project description

Dependency support when starting Supervisor services

supervisord-dependent-startup is a plugin for Supervisor that allows starting up services after dependent services have reached specific states. This plugin is based on ordered-startup-supervisord by Jason Corbett.

The Problem

The problem can be seen in supervisor bug #122. The priority order in supervisor does determine startup order, but when autostart=true supervisor doesn't wait for the previous process to be RUNNING in order to continue. What is even harder is having initialization scripts that need to exit before continuing. This software is meant to make this one use case easier.

How it works

This is an event listener for supervisor. This means it is run by supervisor on startup and supervisor will send it messages whenever a service reaches a particular process state. When configured it will wait till a supervisor subprocess gets to the configured state before starting dependent services.

Caveats

The plugin does not start groups. It can start services that are part of a group, but it won't directly start a group.

Installing

# From pypi
pip install supervisord-dependent-startup

# From github:
pip install -e git+https://github.com/bendikro/supervisord-dependent-startup.git#egg=supervisord-dependent-startup

Configuration

Configuration requires several things. First you need to configure supervisord-dependent-startup as an event listener by adding the following to supervisor.conf:

[eventlistener:dependentstartup]
command=python -m supervisord_dependent_startup
autostart=true
autorestart=unexpected
startretries=0
exitcodes=0,3
events=PROCESS_STATE

A working /etc/supervisor.conf can look like this:

[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)

[supervisord]
logfile=/tmp/supervisord.log
loglevel=info
pidfile=/var/run/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[eventlistener:dependentstartup]
command=python -m supervisord_dependent_startup
autostart=true
autorestart=unexpected
startretries=0
exitcodes=0,3
events=PROCESS_STATE

[include]
files = /etc/supervisord.d/*.ini

Service configuration options

There are three configuration options for a service ([program:*]) to control how it is processed by supervisord-dependent-startup

dependent_startup

Mark this service to be handled by supervisord-dependent-startup. This must be set to true for all services that depend on other services or is being depended on by other services.

Type bool
Required yes
Note When setting this to true, autostart must be set to false

dependent_startup_wait_for

Specify the services this service depends on before in can be started.

Type str
Required no
Format dependent_startup_wait_for=<parent-service>:<state[,state[..]]> [..]
Note state must one or more comma separated values of: starting, running, backoff, stopping, exited, fatal
Example with one dependency

To have a service named child depend on a service parent: dependent_startup_wait_for=parent:running

Example with two dependencies

Multiple dependencies are separated by a white space. To have a service named child depend on the services parent1 and parent2: dependent_startup_wait_for=parent1:running parent2:running

dependent_startup_inherit_priority

Specify if the service should inherit its priority from the services it depends on.

Type bool
Required no
Example dependent_startup_inherit_priority=true

Building and testing

Run tests

python setup.py test

Create source dist

python setup.py sdist

Run tests and code syntax check

tox

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

supervisord-dependent-startup-1.4.0.tar.gz (35.1 kB view details)

Uploaded Source

Built Distribution

supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl (38.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file supervisord-dependent-startup-1.4.0.tar.gz.

File metadata

  • Download URL: supervisord-dependent-startup-1.4.0.tar.gz
  • Upload date:
  • Size: 35.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.14

File hashes

Hashes for supervisord-dependent-startup-1.4.0.tar.gz
Algorithm Hash digest
SHA256 bc45bd4c7a4a68a35ddf505046d203cb076c35512650af230d156a0570e74813
MD5 39194394b8f317b1618ec393de13b7b5
BLAKE2b-256 8bf24daab0e3d8d7062cc89689b32410634b969672aacfeb1228ae503e7296b7

See more details on using hashes here.

File details

Details for the file supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl.

File metadata

  • Download URL: supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 38.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.14

File hashes

Hashes for supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 143a42bcf102010691a8d461d49c3e56ea46aa09e422dabed2b4890ecc67f4d9
MD5 7e0a465a43d547772dca3ae9aacec806
BLAKE2b-256 0e66d386c3d2cf36846ded0b9f4999a6c59fd04fb15d768e59d3acfa039102bc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page