Introduction
procman is a Foreman-like process supervisor written in Rust. It reads a
procman.yaml configuration file, spawns all listed commands, and multiplexes
their output to the terminal with right-aligned name prefixes. When any child
exits or a signal arrives, procman tears everything down cleanly.
Key Features
- Dependency-aware startup ordering — processes can wait on HTTP health checks, TCP ports, file existence, file content, or the exit of another process before starting.
- Multiplexed output — every line is prefixed with the originating process name, right-aligned for easy scanning.
- Per-process log files — each process gets its own log in
procman-logs/, plus a combinedprocman.log. - Process output templates — a process can write
key=valuepairs to a well-known file; downstream processes reference them with${{ process.key }}syntax. - Fan-out — use
for_eachwith a glob pattern to spawn multiple instances of a process template. - Dynamic process management —
procman servelistens on a FIFO so you can add processes at runtime withprocman start. - Clean shutdown — Ctrl-C sends SIGTERM to every child, waits 2 seconds, then sends SIGKILL to anything still running.
Installation
cargo install procman
Or clone and build from source:
git clone https://github.com/wbbradley/procman.git
cd procman
cargo install --path .