# Shell Compose
Shell Compose is a lightweight background process runner for long-running or scheduled jobs.
![Shell Compose](https://raw.githubusercontent.com/pka/shell-compose/main/screencast.gif)
## Features
* Scheduling
- [x] Run background jobs from the command line
- [x] Run multiple jobs in parallel
- [x] Schedule commands to run like a cron job
- [x] Start `just` recipes
- [ ] Configure commands and cron jobs in a YAML file
- [x] Support task dependencies (via Justfile)
- [ ] Attach console to running job
- [x] Restarting failed jobs
- [ ] Trigger execution by file changes
- [ ] Trigger execution by calling HTTP endpoint
* Observability
- [x] Show process status
- [x] Show process resource usage
- [x] Show logs of all running jobs
- [x] Show logs of selected jobs
- [ ] Metrics endpoint
* Cross Platform
- [x] Linux
- [x] MacOS
- [x] Windows
## Integration with `just`
[just](https://just.systems/man/en/) is a command runner with syntax inspired by `make`.
It supports shell commands but also other languages like Python or NodeJS.
Tasks can have dependencies and variables loaded from `.env` files.
Example:
```make
# Simulate data processing
[group('autostart')]
processing:
#!/usr/bin/env bash
echo Start processing
for i in {1..20}; do
echo processing step $i
sleep 1
done
echo Processing finished
# Serve current directory on port 8000
[group('autostart')]
serve:
#!/usr/bin/env python3
import http.server
server_address = ('localhost', 8000)
Handler = http.server.SimpleHTTPRequestHandler
with http.server.HTTPServer(server_address, Handler) as httpd:
print("Server started at http://%s:%s" % server_address, flush=True)
httpd.serve_forever()
```
Running a `just` recipe:
```
shell-compose start processing
```
Running all recipes in a group:
```
shell-compose up autostart
```
## Installation
### Pre-built binaries
We provide several options to access pre-built binaries for a variety of platforms. If you would like to manually download a pre-built binary, checkout [the latest release on GitHub](https://github.com/pka/shell-compose/releases/latest).
### Installer scripts
#### macOS and Linux:
```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pka/shell-compose/releases/latest/download/shell-compose-installer.sh | sh
```
#### Windows PowerShell:
```sh
powershell -ExecutionPolicy ByPass -c "irm https://github.com/pka/shell-compose/releases/latest/download/shell-compose-installer.ps1 | iex"
```
### Other Options
#### cargo-binstall
```sh
cargo binstall shell-compose
```
#### Build From Source
For users who need to install shell-compose on platforms that we do not yet provide pre-built binaries for, you will need to build from source.
`shell-compose` is written in [Rust](https://rust-lang.org) and uses [cargo](https://doc.rust-lang.org/cargo/index.html) to build. Once you've [installed the Rust toolchain (`rustup`)](https://rustup.rs/), run:
```sh
cargo install shell-compose --locked
```