A command line interface for creating & managing s6 services, using the s6 toolset
Dependencies:
- Python 3.6+
- Plumbum
- s6 != 2.8.0.0
- BusyBox or (lsof, psmisc, coreutils)
- musl-utils or glibc
Optional Dependencies:
- lnav or multitail
- highlight or bat
From PyPI:
pip install essex
# activate bash completion:
complete -o dirnames -C _essex essex
From 64-bit musl binary release:
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
complete -o dirnames -C _essex essex # bash completion
essex 2.0.2
Simply manage services
Usage:
essex [SWITCHES] [SUBCOMMAND [SWITCHES]]
Meta-switches:
-h, --help Prints this help message and quits
--help-all Prints help messages of all sub-commands and quits
-v, --version Prints the program's version and quits
Switches:
-d, --directory SERVICES_DIRECTORY:path folder of services to manage; the default is the first existing match from ('./svcs',
'~/svcs', '/var/svcs', '/svcs'), unless a colon-delimited SERVICES_PATHS env var exists;
-l, --logs-directory SERVICES_LOGS_DIRECTORY:path folder of services' log files; the default is SERVICES_DIRECTORY/../svcs-logs
Sub-commands:
cat View (all or specified) services' run, finish, and log commands; Alias for print
disable Configure (all or specified) services to be down, without actually stopping them
enable Configure (all or specified) services to be up, without actually starting them
list List all known services
log View (all or specified) services' current log files
new Create a new service
off Stop all services and their supervision
on Start supervising all services
pid Print the PIDs of running services, or s6-svscan (supervision root) if none specified
print View (all or specified) services' run, finish, and log commands
pt Print a sample Papertrail log_files.yml
reload Restart (all or specified) running services whose run scripts have changed; Depends on
the runfile generating an adjacent run.md5 file, like essex-generated runfiles do; Alias
for upgrade; Deprecated
sig Send a signal to (all or specified) services
start Start (all or specified) services
status View the current states of (all or specified) services
stop Stop (all or specified) services
sync Start or stop services to match their configuration
tree View the process tree from the supervision root
upgrade Restart (all or specified) running services whose run scripts have changed; Depends on
the runfile generating an adjacent run.md5 file, like essex-generated runfiles do
pip install -r requirements.txt
# Edit pyproject.toml as desired.
# Create a wheel and source distribution in dist/:
flit build
# Create a wheel and source distribution in dist/ AND upload to PyPI:
flit publish
One can build a single-file executable suitable for dropping into an Alpine-based container with s6 (no Python or Plumbum necessary), using Docker and pyinstaller-alpine.
From the inner essex folder:
docker run --rm -v "${PWD}:/src" inn0kenty/pyinstaller-alpine:3.7 -F --clean ./essex.py
It comes out to ~10MB. Alternatively, a build script using the same image, but Buildah rather than Docker, is included as mkbin.sh.