{ "info": { "author": "Bendik R\u00f8nning Opstad", "author_email": "bro.devel@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Plugins", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: System :: Boot :: Init" ], "description": "# Dependency support when starting Supervisor services\n\n`supervisord-dependent-startup` is a plugin for\n[Supervisor](http://supervisord.org) that allows starting up services after\ndependent services have reached specific states. This plugin is based on\n[ordered-startup-supervisord](https://github.com/jasoncorbett/ordered-startup-supervisord/)\nby [Jason Corbett](https://github.com/jasoncorbett).\n\n## The Problem\n\nThe problem can be seen in [supervisor bug\n#122](https://github.com/Supervisor/supervisor/issues/122). The priority order\nin supervisor does determine startup order, but when `autostart=true` supervisor\ndoesn't wait for the previous process to be `RUNNING` in order to continue. What\nis even harder is having initialization scripts that need to exit before\ncontinuing. This software is meant to make this one use case easier.\n\n## How it works\n\nThis is an event listener for supervisor. This means it is run by supervisor on\nstartup and supervisor will send it messages whenever a service reaches a\nparticular process state. When configured it will wait till a supervisor\nsubprocess gets to the configured state before starting dependent services.\n\n## Caveats\n\nThe plugin does not start groups. It can start services that are part of a\ngroup, but it won't directly start a group.\n\n## Installing\n\n```\n# From pypi\npip install supervisord-dependent-startup\n\n# From github:\npip install -e git+https://github.com/bendikro/supervisord-dependent-startup.git#egg=supervisord-dependent-startup\n```\n\n## Configuration\n\nConfiguration requires several things. First you need to configure\n`supervisord-dependent-startup` as an event listener by adding the following to `supervisor.conf`:\n\n```INI\n[eventlistener:dependentstartup]\ncommand=python -m supervisord_dependent_startup\nautostart=true\nautorestart=unexpected\nstartretries=0\nexitcodes=0,3\nevents=PROCESS_STATE\n```\n\nA working `/etc/supervisor.conf` can look like this:\n```INI\n[unix_http_server]\nfile=/tmp/supervisor.sock ; (the path to the socket file)\n\n[supervisord]\nlogfile=/tmp/supervisord.log\nloglevel=info\npidfile=/var/run/supervisord.pid\nnodaemon=false\nminfds=1024\nminprocs=200\n\n[rpcinterface:supervisor]\nsupervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface\n\n[supervisorctl]\nserverurl=unix:///tmp/supervisor.sock\n\n[eventlistener:dependentstartup]\ncommand=python -m supervisord_dependent_startup\nautostart=true\nautorestart=unexpected\nstartretries=0\nexitcodes=0,3\nevents=PROCESS_STATE\n\n[include]\nfiles = /etc/supervisord.d/*.ini\n```\n\n\n### Service configuration options\n\nThere are three configuration options for a service (`[program:*]`) to control\nhow it is processed by `supervisord-dependent-startup`\n\n#### `dependent_startup`\n\nMark this service to be handled by `supervisord-dependent-startup`. This must be\nset to `true` for all services that depend on other services or is being\ndepended on by other services.\n\n| Type | **bool**\n:--- | :---\n| **Required** | **yes**\n| **Note** | When setting this to `true`, `autostart` *must* be set to `false`\n\n\n#### `dependent_startup_wait_for`\n\nSpecify the services this service depends on before in can be started.\n\n| Type | **str**\n:--- | :---\n| **Required**| **no**\n| **Format** | `dependent_startup_wait_for=: [..]`\n| **Note** | `state` must one or more comma separated values of: `starting`, `running`, `backoff`, `stopping`, `exited`, `fatal`\n\n###### Example with one dependency\n\nTo have a service named *child* depend on a service *parent*:\n``dependent_startup_wait_for=parent:running``\n\n\n###### Example with two dependencies\n\nMultiple dependencies are separated by a white space. To have a service named\n*child* depend on the services *parent1* and *parent2*:\n``dependent_startup_wait_for=parent1:running parent2:running``\n\n#### `dependent_startup_inherit_priority`\n\nSpecify if the service should inherit its priority from the services it depends\non.\n\n| Type | **bool**\n:--- | :---\n| **Required**| **no**\n| **Example** | ``dependent_startup_inherit_priority=true``\n\n\n## Building and testing\n\n#### Run tests\n\n```Shell\npython setup.py test\n```\n\n#### Create source dist\n\n```Shell\npython setup.py sdist\n```\n\n#### Run tests and code syntax check\n\n```Shell\ntox\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bendikro/supervisord-dependent-startup", "keywords": "", "license": "Apache Software License v2", "maintainer": "", "maintainer_email": "", "name": "supervisord-dependent-startup", "package_url": "https://pypi.org/project/supervisord-dependent-startup/", "platform": "", "project_url": "https://pypi.org/project/supervisord-dependent-startup/", "project_urls": { "Homepage": "https://github.com/bendikro/supervisord-dependent-startup" }, "release_url": "https://pypi.org/project/supervisord-dependent-startup/1.4.0/", "requires_dist": null, "requires_python": "", "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", "version": "1.4.0" }, "last_serial": 5949411, "releases": { "1.3.0": [ { "comment_text": "", "digests": { "md5": "1fec9d9ea369b490a7094b1b895b5e8a", "sha256": "72d28b0ec5b4a08b0a90eaaaf76b2cc4352841a405feee574b8f84c947554608" }, "downloads": -1, "filename": "supervisord_dependent_startup-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fec9d9ea369b490a7094b1b895b5e8a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31359, "upload_time": "2019-05-22T17:00:46", "url": "https://files.pythonhosted.org/packages/ca/a7/acad016ccd62292c044be773d6a982ef4f49c2cec091108ac31b0b70a3a6/supervisord_dependent_startup-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30cf15695eb7e48a6231f6b88b6a8efa", "sha256": "a0757211eb6cbf4bf5f93c8e9696bdecc7f1ce1d18e1a370150c3c934e356dc5" }, "downloads": -1, "filename": "supervisord-dependent-startup-1.3.0.tar.gz", "has_sig": false, "md5_digest": "30cf15695eb7e48a6231f6b88b6a8efa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22495, "upload_time": "2019-05-22T17:00:43", "url": "https://files.pythonhosted.org/packages/4a/5d/83583a9b68426c9fc169edf0a6ab12760258ee2d2b5263f8f342811e62d6/supervisord-dependent-startup-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "e180e9470d09eb69dcb7939ea857d9a9", "sha256": "68a1adad4076c16d028a6378f7602c68ff31a765feb45b52919301ec18105b67" }, "downloads": -1, "filename": "supervisord_dependent_startup-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e180e9470d09eb69dcb7939ea857d9a9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31402, "upload_time": "2019-05-22T18:45:25", "url": "https://files.pythonhosted.org/packages/46/45/c2cc7a962cccc9c4096f100b01c18bfe245f005ea971f981b15f32653040/supervisord_dependent_startup-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acfd25f3686fcd7ea213a05f6ff1a4f2", "sha256": "ba5e22f96ec1ecffff4c434f44366367d50ca563797dad0d65785e59562d45f7" }, "downloads": -1, "filename": "supervisord-dependent-startup-1.3.1.tar.gz", "has_sig": false, "md5_digest": "acfd25f3686fcd7ea213a05f6ff1a4f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22600, "upload_time": "2019-05-22T18:45:22", "url": "https://files.pythonhosted.org/packages/39/88/3085e620c636011d441498e73ad4870264f45a526fb6d6a4d99e328951e6/supervisord-dependent-startup-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "3f6da9970f493e8832d76238fb8a3d75", "sha256": "6dc4c84911b8b2ad1db7eb27f45d76b60ff847feb90b2f91691dbf47370fc1bc" }, "downloads": -1, "filename": "supervisord_dependent_startup-1.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f6da9970f493e8832d76238fb8a3d75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31702, "upload_time": "2019-05-23T20:02:15", "url": "https://files.pythonhosted.org/packages/65/1d/4e2b1a94f66977c7e885e169988a223498ea9b49575d0b6524a6744db230/supervisord_dependent_startup-1.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e245784e86f42184498a63b84f4ddfe", "sha256": "540d642c56c5c784a02ae9c1ceb79bff788f222a7fbc3df3316f0df00f8171cb" }, "downloads": -1, "filename": "supervisord-dependent-startup-1.3.2.tar.gz", "has_sig": false, "md5_digest": "2e245784e86f42184498a63b84f4ddfe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22553, "upload_time": "2019-05-23T20:02:13", "url": "https://files.pythonhosted.org/packages/07/28/de04cdf8b4ff939d696534c5af409da43fe0e9aa583cbfe02493a6a8771f/supervisord-dependent-startup-1.3.2.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "7e0a465a43d547772dca3ae9aacec806", "sha256": "143a42bcf102010691a8d461d49c3e56ea46aa09e422dabed2b4890ecc67f4d9" }, "downloads": -1, "filename": "supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e0a465a43d547772dca3ae9aacec806", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38354, "upload_time": "2019-10-09T12:11:12", "url": "https://files.pythonhosted.org/packages/0e/66/d386c3d2cf36846ded0b9f4999a6c59fd04fb15d768e59d3acfa039102bc/supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39194394b8f317b1618ec393de13b7b5", "sha256": "bc45bd4c7a4a68a35ddf505046d203cb076c35512650af230d156a0570e74813" }, "downloads": -1, "filename": "supervisord-dependent-startup-1.4.0.tar.gz", "has_sig": false, "md5_digest": "39194394b8f317b1618ec393de13b7b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35074, "upload_time": "2019-10-09T12:11:09", "url": "https://files.pythonhosted.org/packages/8b/f2/4daab0e3d8d7062cc89689b32410634b969672aacfeb1228ae503e7296b7/supervisord-dependent-startup-1.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7e0a465a43d547772dca3ae9aacec806", "sha256": "143a42bcf102010691a8d461d49c3e56ea46aa09e422dabed2b4890ecc67f4d9" }, "downloads": -1, "filename": "supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e0a465a43d547772dca3ae9aacec806", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38354, "upload_time": "2019-10-09T12:11:12", "url": "https://files.pythonhosted.org/packages/0e/66/d386c3d2cf36846ded0b9f4999a6c59fd04fb15d768e59d3acfa039102bc/supervisord_dependent_startup-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39194394b8f317b1618ec393de13b7b5", "sha256": "bc45bd4c7a4a68a35ddf505046d203cb076c35512650af230d156a0570e74813" }, "downloads": -1, "filename": "supervisord-dependent-startup-1.4.0.tar.gz", "has_sig": false, "md5_digest": "39194394b8f317b1618ec393de13b7b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35074, "upload_time": "2019-10-09T12:11:09", "url": "https://files.pythonhosted.org/packages/8b/f2/4daab0e3d8d7062cc89689b32410634b969672aacfeb1228ae503e7296b7/supervisord-dependent-startup-1.4.0.tar.gz" } ] }