%global _empty_manifest_terminate_build 0 Name: python-supervisord-dependent-startup Version: 1.4.0 Release: 1 Summary: A plugin for Supervisor that allows starting up services after dependent services have reached specific states. Based on ordered-startup-supervisord by Jason Corbett License: Apache Software License v2 URL: https://github.com/bendikro/supervisord-dependent-startup Source0: https://mirrors.nju.edu.cn/pypi/web/packages/8b/f2/4daab0e3d8d7062cc89689b32410634b969672aacfeb1228ae503e7296b7/supervisord-dependent-startup-1.4.0.tar.gz BuildArch: noarch %description # Dependency support when starting Supervisor services `supervisord-dependent-startup` is a plugin for [Supervisor](http://supervisord.org) that allows starting up services after dependent services have reached specific states. This plugin is based on [ordered-startup-supervisord](https://github.com/jasoncorbett/ordered-startup-supervisord/) by [Jason Corbett](https://github.com/jasoncorbett). ## The Problem The problem can be seen in [supervisor bug #122](https://github.com/Supervisor/supervisor/issues/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`: ```INI [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: ```INI [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=: [..]` | **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 ```Shell python setup.py test ``` #### Create source dist ```Shell python setup.py sdist ``` #### Run tests and code syntax check ```Shell tox ``` %package -n python3-supervisord-dependent-startup Summary: A plugin for Supervisor that allows starting up services after dependent services have reached specific states. Based on ordered-startup-supervisord by Jason Corbett Provides: python-supervisord-dependent-startup BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-supervisord-dependent-startup # Dependency support when starting Supervisor services `supervisord-dependent-startup` is a plugin for [Supervisor](http://supervisord.org) that allows starting up services after dependent services have reached specific states. This plugin is based on [ordered-startup-supervisord](https://github.com/jasoncorbett/ordered-startup-supervisord/) by [Jason Corbett](https://github.com/jasoncorbett). ## The Problem The problem can be seen in [supervisor bug #122](https://github.com/Supervisor/supervisor/issues/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`: ```INI [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: ```INI [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=: [..]` | **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 ```Shell python setup.py test ``` #### Create source dist ```Shell python setup.py sdist ``` #### Run tests and code syntax check ```Shell tox ``` %package help Summary: Development documents and examples for supervisord-dependent-startup Provides: python3-supervisord-dependent-startup-doc %description help # Dependency support when starting Supervisor services `supervisord-dependent-startup` is a plugin for [Supervisor](http://supervisord.org) that allows starting up services after dependent services have reached specific states. This plugin is based on [ordered-startup-supervisord](https://github.com/jasoncorbett/ordered-startup-supervisord/) by [Jason Corbett](https://github.com/jasoncorbett). ## The Problem The problem can be seen in [supervisor bug #122](https://github.com/Supervisor/supervisor/issues/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`: ```INI [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: ```INI [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=: [..]` | **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 ```Shell python setup.py test ``` #### Create source dist ```Shell python setup.py sdist ``` #### Run tests and code syntax check ```Shell tox ``` %prep %autosetup -n supervisord-dependent-startup-1.4.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-supervisord-dependent-startup -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Apr 25 2023 Python_Bot - 1.4.0-1 - Package Spec generated