{ "info": { "author": "Andy Kluger", "author_email": "AndyKluger@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Essex\n=====\n\nA command line interface for creating & managing s6 services, using the s6 toolset\n\nDependencies:\n\n\t- Python 3.6+\n\t- Plumbum\n\t- s6\n\t- BusyBox or (lsof, psmisc, coreutils)\n\t- musl-utils or glibc\n\nOptional Dependencies:\n\n\t- lnav or multitail\n\t- highlight or bat\n\n`Demo Video`_\n\n.. _Demo Video: https://streamable.com/oek3d\n\nInstallation\n------------\n\nFrom PyPI:\n\n.. code-block:: sh\n\n pip install essex\n # activate bash completion:\n complete -o dirnames -C _essex essex\n\nFrom 64-bit musl binary release:\n\n.. code-block:: sh\n\n wget \"https://github.com/AndydeCleyre/essex/releases/download/2.0.2/essex-2.0.2-musl-x86_64.tar.xz\" -O - | tar xJf - -C /usr/local/bin essex _essex\n complete -o dirnames -C _essex essex # bash completion\n\nUsage\n-----\n\n::\n\n essex 2.0.2\n\n Simply manage services\n\n Usage:\n essex [SWITCHES] [SUBCOMMAND [SWITCHES]]\n\n Meta-switches:\n -h, --help Prints this help message and quits\n --help-all Prints help messages of all sub-commands and quits\n -v, --version Prints the program's version and quits\n\n Switches:\n -d, --directory SERVICES_DIRECTORY:path folder of services to manage; the default is the first existing match from ('./svcs',\n '~/svcs', '/var/svcs', '/svcs'), unless a colon-delimited SERVICES_PATHS env var exists;\n -l, --logs-directory SERVICES_LOGS_DIRECTORY:path folder of services' log files; the default is SERVICES_DIRECTORY/../svcs-logs\n\n Sub-commands:\n cat View (all or specified) services' run, finish, and log commands; Alias for print\n disable Configure (all or specified) services to be down, without actually stopping them\n enable Configure (all or specified) services to be up, without actually starting them\n list List all known services\n log View (all or specified) services' current log files\n new Create a new service\n off Stop all services and their supervision\n on Start supervising all services\n pid Print the PIDs of running services, or s6-svscan (supervision root) if none specified\n print View (all or specified) services' run, finish, and log commands\n pt Print a sample Papertrail log_files.yml\n reload Restart (all or specified) running services whose run scripts have changed; Depends on\n the runfile generating an adjacent run.md5 file, like essex-generated runfiles do; Alias\n for upgrade; Deprecated\n sig Send a signal to (all or specified) services\n start Start (all or specified) services\n status View the current states of (all or specified) services\n stop Stop (all or specified) services\n sync Start or stop services to match their configuration\n tree View the process tree from the supervision root\n upgrade Restart (all or specified) running services whose run scripts have changed; Depends on\n the runfile generating an adjacent run.md5 file, like essex-generated runfiles do\n\n\nPackaging\n---------\n\n.. code-block:: sh\n\n pip install -r requirements.txt\n # Edit pyproject.toml as desired.\n # Create a wheel and source distribution in dist/:\n flit build\n # Create a wheel and source distribution in dist/ AND upload to PyPI:\n flit publish\n\nOne can build a single-file executable suitable for dropping into an Alpine-based container\nwith s6 (no Python or Plumbum necessary), using Docker and `pyinstaller-alpine`_.\n\n.. _pyinstaller-alpine: https://github.com/inn0kenty/pyinstaller-alpine\n\nFrom the inner `essex` folder:\n\n.. code-block:: sh\n\n docker run --rm -v \"${PWD}:/src\" inn0kenty/pyinstaller-alpine:3.7 -F --clean ./essex.py\n\nIt comes out to ~10MB. Alternatively, a build script using the same image,\nbut Buildah rather than Docker, is included as `mkbin.sh`.\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AndydeCleyre/essex", "keywords": "skarnet s6 execline supervise supervision", "license": "WTFPL", "maintainer": "", "maintainer_email": "", "name": "essex", "package_url": "https://pypi.org/project/essex/", "platform": "", "project_url": "https://pypi.org/project/essex/", "project_urls": { "Homepage": "https://github.com/AndydeCleyre/essex" }, "release_url": "https://pypi.org/project/essex/2.0.2/", "requires_dist": [ "plumbum >=1.6.7" ], "requires_python": "~=3.6", "summary": "A command line interface for creating & managing s6 services, using the s6 toolset", "version": "2.0.2" }, "last_serial": 4892100, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "c332b70d980f5bbe8cd51f038e3af164", "sha256": "1d27b8eb0ce736aff3df3118bea807d86fada6a6ad693a62e3ac41a790ce99e5" }, "downloads": -1, "filename": "essex-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c332b70d980f5bbe8cd51f038e3af164", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 25443, "upload_time": "2019-01-04T19:09:12", "url": "https://files.pythonhosted.org/packages/95/24/3e441c3d26a2213ce0d1e6e7cfc720f3c52cd2b93fd2e31dc5488c6beccf/essex-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4fdb59e00b6f8048b4a39faebbbe070", "sha256": "a694c77006e30cadce466906937a95991705a1c1e9d2f33f0bd66b5e1c0ab887" }, "downloads": -1, "filename": "essex-0.1.tar.gz", "has_sig": false, "md5_digest": "f4fdb59e00b6f8048b4a39faebbbe070", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 8125, "upload_time": "2019-01-04T19:09:29", "url": "https://files.pythonhosted.org/packages/03/27/899f329663e9e594557b28fac94755ea8245782f88d8d17c2754bcf2111c/essex-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ba5c55f429fbe217c7b07d7aa3388018", "sha256": "17a1240d62a228f746e4e4bc1f1710fd5d100bcc3ab5c0b7cf7fe65873e360af" }, "downloads": -1, "filename": "essex-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ba5c55f429fbe217c7b07d7aa3388018", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 25443, "upload_time": "2019-01-04T19:26:50", "url": "https://files.pythonhosted.org/packages/7e/53/c370f44bcdc5ec3476c7928bbebd95e4eb9c2db4317adf0e4d32e7a262e2/essex-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c815d564fa04aa9cfc97c387130c424", "sha256": "4b663596c08d261b73b1e55e7bbd2ef2a4ea3a8c16f6859a5a99989e3be5167a" }, "downloads": -1, "filename": "essex-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5c815d564fa04aa9cfc97c387130c424", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 8138, "upload_time": "2019-01-04T19:26:53", "url": "https://files.pythonhosted.org/packages/bc/f2/db7e1f36e709a33de4d4158b6ea252401513f5b302564bc7cced85b0a8c3/essex-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4da09ed7e1b33bf043b1b46a2af5829e", "sha256": "b29d3bd83501e241e8d2d50f4ca99945504237ae46850b9e5af333186b51e8e2" }, "downloads": -1, "filename": "essex-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4da09ed7e1b33bf043b1b46a2af5829e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 25682, "upload_time": "2019-01-09T19:54:30", "url": "https://files.pythonhosted.org/packages/b9/9a/357097f2e8cdf6ed2721abde2ef53082b7b2a5198b02ee2c99050a29fb61/essex-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78b200ff9ab853423c66efb3a2ff58c5", "sha256": "ebb8b1f11e4f95d3843274953ccf99916f2fd339bb92490a7d42094efd1282ae" }, "downloads": -1, "filename": "essex-0.2.0.tar.gz", "has_sig": false, "md5_digest": "78b200ff9ab853423c66efb3a2ff58c5", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 8258, "upload_time": "2019-01-09T19:54:35", "url": "https://files.pythonhosted.org/packages/fa/f8/e6fb85f3401cb817128944d2f6b0641a66a1e7c47878c18b8c385058cf83/essex-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0480a4ef1a25a5146342372363e3e1e5", "sha256": "4e4c13ae416b176196910bc4de70a5b48243c334e4029381ea90513fc6e7ea99" }, "downloads": -1, "filename": "essex-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0480a4ef1a25a5146342372363e3e1e5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 26188, "upload_time": "2019-01-11T08:47:22", "url": "https://files.pythonhosted.org/packages/7d/33/97767bb25adce946caca3ebc0ea0d736aff71612bd8d5a0246c5c6d90eba/essex-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b000f67e363490b1933a91c81a26badf", "sha256": "1535ede4afd93ba6fc9bd355eab4412c4bea7ddc811b4f7fa4bc9c28f05fa28c" }, "downloads": -1, "filename": "essex-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b000f67e363490b1933a91c81a26badf", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 8427, "upload_time": "2019-01-11T08:47:29", "url": "https://files.pythonhosted.org/packages/17/78/b514210e351fec51e6292690dbe71b733c014df5f6185337aa168fba8c28/essex-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "92464a260bd3f7c8df86af337a2ab0a0", "sha256": "4879b0f003f3693627e095723abb1c215f1c83995fc305760e9781b78b5820f2" }, "downloads": -1, "filename": "essex-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "92464a260bd3f7c8df86af337a2ab0a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 26426, "upload_time": "2019-01-13T04:07:31", "url": "https://files.pythonhosted.org/packages/45/c9/92ef398804d5cd087d9710ee6995f1903d38664068e9fb1d5b37b20200d6/essex-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f30088a4e3d4672c0dd92aa9d0b8a65", "sha256": "a14c3ea427bf266a114b90b18169fdb30b456cfa296d7b6996effe11961a11bd" }, "downloads": -1, "filename": "essex-0.2.2.tar.gz", "has_sig": false, "md5_digest": "8f30088a4e3d4672c0dd92aa9d0b8a65", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 8632, "upload_time": "2019-01-13T04:07:36", "url": "https://files.pythonhosted.org/packages/8e/b3/fe50918470a532b5e9dd41a651c29e841e802cc830d2c2a9f5ee3f95f927/essex-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "7f2f7f325e36dace514ce2a7ef85ba2d", "sha256": "95984b4a17be2bdb3ca27b935a6f45d36e88350e2302d3323743401e4c2821fa" }, "downloads": -1, "filename": "essex-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7f2f7f325e36dace514ce2a7ef85ba2d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 27608, "upload_time": "2019-01-19T20:02:13", "url": "https://files.pythonhosted.org/packages/18/57/f7ddc1f6a3db48e4b41a687563844020f8f4a9898d21f1b75f52d90aac41/essex-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09bcc007906b9f13dbbabe0a62a541ad", "sha256": "06b133442fb27fb369100ce6941b5c1c467f014f93f0fa3952104bed5e5eb337" }, "downloads": -1, "filename": "essex-0.3.0.tar.gz", "has_sig": false, "md5_digest": "09bcc007906b9f13dbbabe0a62a541ad", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 9656, "upload_time": "2019-01-19T20:02:16", "url": "https://files.pythonhosted.org/packages/d2/ba/3a21b6b3a6223fef435b540eb4fe6f4a4c0f0f05a2454c9408e5bdb3214d/essex-0.3.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "69006cfb0f2693eaa22f8f64cf533941", "sha256": "1defec2dae2528abfb19d14390c178b4450d3cacae2a2e1c36e87e0bb82816d8" }, "downloads": -1, "filename": "essex-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "69006cfb0f2693eaa22f8f64cf533941", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 27715, "upload_time": "2019-01-28T01:32:00", "url": "https://files.pythonhosted.org/packages/3f/41/51ed8e09edcdadcb86d9ffb5e31fcc7b3ec988183b1cd8df219453cc46c5/essex-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b9b3eaeb4936c0aebfbeb1aa8b2a64b", "sha256": "9c6613536fd0528ab19642720287b1605192f76f940fd3524f7a2399ceba6b81" }, "downloads": -1, "filename": "essex-1.0.0.tar.gz", "has_sig": false, "md5_digest": "4b9b3eaeb4936c0aebfbeb1aa8b2a64b", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 9820, "upload_time": "2019-01-28T01:32:04", "url": "https://files.pythonhosted.org/packages/60/d2/9f739342b3b4509fcc7c0676240084b200394d56856a6fe64eb63800f44b/essex-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "081b53cee84462a190614f3e3eb99ea4", "sha256": "6e91e23bc9ee6bdaaec90413f117e542a33474612196199f995b393363c42419" }, "downloads": -1, "filename": "essex-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "081b53cee84462a190614f3e3eb99ea4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 29364, "upload_time": "2019-02-01T20:11:01", "url": "https://files.pythonhosted.org/packages/55/f3/332c7358d483a0805584f8d57802e92cd1f935cbc761f54a61206fa26346/essex-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b4e2f8b8ef5bfae1a3b2a6f6f85c283", "sha256": "91a7f086c70fc6768299dfeb5d569795aa0fdbe3d415342b17f7cd04565a1982" }, "downloads": -1, "filename": "essex-1.1.0.tar.gz", "has_sig": false, "md5_digest": "4b4e2f8b8ef5bfae1a3b2a6f6f85c283", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 10308, "upload_time": "2019-02-01T20:11:05", "url": "https://files.pythonhosted.org/packages/9a/09/21bf665aab516824396f0f7ed73ccbffa144e421f0044a8522940e0d7a4b/essex-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "abec0c2a33b1b3e33b54485958447f26", "sha256": "728d95826cddb4dfc6ba4c29f8f50687cfcbbf6ec7e8a5475bdc83a2f668ed59" }, "downloads": -1, "filename": "essex-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "abec0c2a33b1b3e33b54485958447f26", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 30924, "upload_time": "2019-02-08T19:33:00", "url": "https://files.pythonhosted.org/packages/6a/dc/3551ea084b9998480ec5f4293c6b7ab268b63f73e79dd1b11b06e6f175be/essex-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c32ff7890fc006d11de31d80ab49d8b8", "sha256": "be256de51f7cf7b51b380dcdcb14606e463c19d5e2211da74d22dd1fec6a1379" }, "downloads": -1, "filename": "essex-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c32ff7890fc006d11de31d80ab49d8b8", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 12693, "upload_time": "2019-02-08T19:33:08", "url": "https://files.pythonhosted.org/packages/bc/30/c89f9bee9e1e0080cce60f9929ea601ef7f32bb7a11f817a300efa9af847/essex-1.2.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "947d1a3076e1175dcbd159f8310651ec", "sha256": "ce89cf5b99f31533b6f7f4fe2eacdddb56cc44bf28ccc8a5ac179bf84366d961" }, "downloads": -1, "filename": "essex-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "947d1a3076e1175dcbd159f8310651ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 31973, "upload_time": "2019-02-22T20:26:50", "url": "https://files.pythonhosted.org/packages/d2/3e/0438a77572cbe0fac8f471781e45e93ea7b17e22a45f625148bf6dc56cf7/essex-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5485fa06bb848583a633ec36e72215ac", "sha256": "9b729d05d5ce90e7577a537df429c4ddb82aef2247cd3fa38494097737b11d0f" }, "downloads": -1, "filename": "essex-2.0.0.tar.gz", "has_sig": false, "md5_digest": "5485fa06bb848583a633ec36e72215ac", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 12999, "upload_time": "2019-02-22T20:26:53", "url": "https://files.pythonhosted.org/packages/37/e9/5b4cb835a5b64acb91f70ab2b69613279a2c52019158827a0000a05d06cb/essex-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "ab983a261fdb42dcfeae603590e88801", "sha256": "3f3c9191bc0ec3ee707e723eff9fff13dca5c383deddbda538d2cfd2f2e047e2" }, "downloads": -1, "filename": "essex-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ab983a261fdb42dcfeae603590e88801", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 31980, "upload_time": "2019-02-26T18:41:02", "url": "https://files.pythonhosted.org/packages/1e/86/caf9499a94b184996baa8ff03c9d1199cbce9b862dfd1ecfc25f9d421cec/essex-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96f839e54d1af9397fe4298f9fb336d2", "sha256": "95fd69cfc5b4ffd35030f69dfcb6a82fdba9b8bc07691795fd20655a2d35dd0e" }, "downloads": -1, "filename": "essex-2.0.1.tar.gz", "has_sig": false, "md5_digest": "96f839e54d1af9397fe4298f9fb336d2", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 13036, "upload_time": "2019-02-26T18:41:05", "url": "https://files.pythonhosted.org/packages/43/67/71c42cc713068a6ec56884e0caf2fbb58a3caac046730e3c532c8c5d5aa1/essex-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "1e0e27b55868a27cdfb8291f553a1096", "sha256": "a8b25de0e7548cd729ba5841088531fff1ae915cae227fe3f369c1d295279b34" }, "downloads": -1, "filename": "essex-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e0e27b55868a27cdfb8291f553a1096", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 32007, "upload_time": "2019-03-03T23:07:09", "url": "https://files.pythonhosted.org/packages/76/9a/fcec462addfb310f6801e1bb9e747c9542df3778b9d72777af58012fa74d/essex-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06d0bb18c523ddfa71f97e71f5080705", "sha256": "3b159e68dc6023a980959dfcbda7c8cfa89e8d7ef64a203f7389fe2d63a54f88" }, "downloads": -1, "filename": "essex-2.0.2.tar.gz", "has_sig": false, "md5_digest": "06d0bb18c523ddfa71f97e71f5080705", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 13024, "upload_time": "2019-03-03T23:07:12", "url": "https://files.pythonhosted.org/packages/95/aa/8faf3924c0d5ed9a7b257c596f5b7591f7573dd601d9fd75041a9d4407fa/essex-2.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e0e27b55868a27cdfb8291f553a1096", "sha256": "a8b25de0e7548cd729ba5841088531fff1ae915cae227fe3f369c1d295279b34" }, "downloads": -1, "filename": "essex-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e0e27b55868a27cdfb8291f553a1096", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "~=3.6", "size": 32007, "upload_time": "2019-03-03T23:07:09", "url": "https://files.pythonhosted.org/packages/76/9a/fcec462addfb310f6801e1bb9e747c9542df3778b9d72777af58012fa74d/essex-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06d0bb18c523ddfa71f97e71f5080705", "sha256": "3b159e68dc6023a980959dfcbda7c8cfa89e8d7ef64a203f7389fe2d63a54f88" }, "downloads": -1, "filename": "essex-2.0.2.tar.gz", "has_sig": false, "md5_digest": "06d0bb18c523ddfa71f97e71f5080705", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 13024, "upload_time": "2019-03-03T23:07:12", "url": "https://files.pythonhosted.org/packages/95/aa/8faf3924c0d5ed9a7b257c596f5b7591f7573dd601d9fd75041a9d4407fa/essex-2.0.2.tar.gz" } ] }