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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc45bd4c7a4a68a35ddf505046d203cb076c35512650af230d156a0570e74813 |
|
MD5 | 39194394b8f317b1618ec393de13b7b5 |
|
BLAKE2b-256 | 8bf24daab0e3d8d7062cc89689b32410634b969672aacfeb1228ae503e7296b7 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 143a42bcf102010691a8d461d49c3e56ea46aa09e422dabed2b4890ecc67f4d9 |
|
MD5 | 7e0a465a43d547772dca3ae9aacec806 |
|
BLAKE2b-256 | 0e66d386c3d2cf36846ded0b9f4999a6c59fd04fb15d768e59d3acfa039102bc |