procman-0.1.0 is not a library.
procman
A foreman-like process supervisor written in Rust. Reads a Procfile, spawns all listed commands, multiplexes their output with name prefixes, and tears everything down cleanly when any child exits or a signal arrives.
Usage
cargo install --path .
procman [Procfile]
Defaults to Procfile in the current directory if no path is given.
Procfile Format
# Global environment variables (before any command lines)
DATABASE_URL=postgres://localhost/myapp
PORT=3000
# Commands — one per line
web serve --port $PORT
worker process-jobs --db $DATABASE_URL
- Lines starting with
#are comments. - Trailing
\joins continuation lines. KEY=valuelines before the first command set global environment variables.- Inline
KEY=valuetokens at the start of a command line set per-command env vars. $VARreferences are substituted from the merged environment (inherited + global + inline). Undefined variables are a hard error — nothing is spawned.- Process names are derived from the program basename. Duplicates get
.1,.2suffixes.
Behavior
- All children share a process group.
- stderr is merged into stdout per-process.
- Output is prefixed with the process name, right-aligned and padded.
- Per-process logs are written to
./logs/<name>.log. - On SIGINT or SIGTERM, all children receive SIGTERM. After a 2-second grace period, remaining processes are sent SIGKILL.
- procman exits with the first child's exit code.
License
MIT