Superviseur
A simple process supervisor for UNIX-like systems. Currently only supports running executables, but I plan to add support for managing wasm and docker containers in the future.
Project Status:
๐
Installation
# Install dependencies
brew install protobuf # macOS
sudo apt-get install -y protobuf-compiler # Ubuntu/Debian
curl -fsSL https://bun.sh/install | bash
# Compile
git clone https://github.com/tsirysndr/superviseur
cd superviseur/webui && bun install && bun run build && cd ..
cargo install --path .
macOS/Linux
brew install tsirysndr/tap/superviseur
Or download the latest release for your platform here.
๐ฆ
Downloads
Mac
: arm64: superviseur_v0.1.0-alpha.5_aarch64-apple-darwin.tar.gz intel: superviseur_v0.1.0-alpha.5_x86_64-apple-darwin.tar.gzLinux
: superviseur_v0.1.0-alpha.5_x86_64-unknown-linux-gnu.tar.gz
๐
Usage
USAGE:
superviseur [SUBCOMMAND]
OPTIONS:
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
build Build all services or a specific one
config Get the config of a service
down Stop all services
help Print this message or the help of the given subcommand(s)
init Initialize the superviseur config
list List all services [aliases: ls]
log Get the log of a process
new Create a new service config
ps List all running processes
restart Restart all services or a specific one
serve Start the superviseur server
start Start all services or a specific one
status Get the status of a service
stop Stop all services or a specific one
tail Tail the log of a process
ui Start the superviseur ui
up Start all services
๐
Getting Started
Start the server
Superviseur uses a server-client architecture. The server is responsible for managing the processes, while the client is responsible for communicating with the server.
superviseur daemon
Initialize a new project
superviseur new
Start by initializing a new project. This will create a Superfile.hcl
file in the current directory with the following contents:
project = "demo"
services = [
{
"name" = "demo"
"type" = "exec"
"command" = "ping $GITHUB_DOMAIN"
"working_dir" = "/tmp"
"description" = "Ping Service Example"
"depends_on" = []
"env" = {
"GITHUB_DOMAIN" = "github.com"
}
"autostart" = true
"autorestart" = false
"namespace" = "demo_namespace"
"port" = 5060
"stdout" = "/tmp/demo-stdout.log"
"stderr" = "/tmp/demo-stderr.log"
}
]
Start the service
superviseur start demo
Start the service by running the start
command.
Check the status
superviseur status demo
Output:
โ demo - Ping Service Example
Active: Running since 2023-03-05 19:17:56.512455 UTC; 17 seconds ago
PID: 30887
Command: ping $GITHUB_DOMAIN
Directory: /tmp
Log: /tmp/demo-stdout.log
Stderr: /tmp/demo-stderr.log
AutoRestart: false
Type: exec
Envs: GITHUB_DOMAIN=github.com
Show running processes
superviseur ps
Output:
NAME PID STATUS COMMAND TYPE
demo 31200 Up 4 seconds ago ping $GITHUB_DOMAIN exec
Stop the service
superviseur stop demo
Show all services
superviseur ls
Output:
NAME STATUS COMMAND TYPE
demo STOPPED "ping $GITHUB_DOMAIN" exec
As a Github Action
You can use the setup-superviseur Github Action like so:
- uses: tsirysndr/setup-superviseur@v1
with:
version: 'v0.1.0-alpha.5'
- run: superviseur --help
๐
Examples
See the examples directory for more examples.