Runit
Runit is a UNIX init system with service supervision — a replacement for sysvinit and other init schemes. It’s small, fast, and follows the Unix philosophy of doing one thing well. Written by Gerrit Pape, it’s been around since the early 2000s and is battle-tested.
Philosophy
Runit is built on the same ideas as daemontools (by DJ Bernstein): each service gets its own supervision directory with a run script, and a supervisor process (runsv) keeps it alive. If the service crashes, it’s automatically restarted. No complex service files, no binary logs, no centralized daemon — just scripts and processes.
Who uses it?
- Void Linux — its default init system
- Artix Linux — available as an alternative
- AntiX — defaults to runit
- Embedded systems, containers, minimal installs
How it works
Runit boots in three stages:
Stage 1 (/etc/runit/1) → One-time initialization (filesystems, udev, etc.)
Stage 2 (/etc/runit/2) → runsvdir starts, supervises all services
Stage 3 (/etc/runit/3) → Shutdown (kill processes, unmount, halt)
Services live in /etc/sv/ and are enabled by symlinking into /run/runit/service (or /etc/runit/runsvdir/default/).
Key concepts
| Concept | What it means |
|---|---|
| Service directories | Each service is a directory with an executable run script |
runsv | Supervises one service, restarts it if it crashes |
runsvdir | Starts/stops supervisors for a collection of services |
sv | Main control tool — start, stop, restart, status |
| Runlevels | Directories under /etc/runit/runsvdir/ (default, single, etc.) |
| Logging | Optional — add a log/ subdirectory with its own run script |
Basic commands
# Start a service
sv up sshd
# Stop a service
sv down sshd
# Restart a service
sv restart sshd
# Check status
sv status sshd
# Enable at boot (create symlink)
ln -s /etc/sv/sshd /etc/runit/runsvdir/default/
# Disable at boot (remove symlink)
rm /etc/runit/runsvdir/default/sshd
Example service
/etc/sv/sshd/run:
#!/bin/sh
exec /usr/bin/sshd -D
That’s it. No config parsing, no dependency declarations, no unit files. If the script exits, runsv restarts it. If you want logging, add log/run:
/etc/sv/sshd/log/run:
#!/bin/sh
exec svlogd -tt /var/log/sshd
Comparison with OpenRC
| OpenRC | Runit | |
|---|---|---|
| Service format | Shell scripts with start()/stop() | Executable run scripts |
| Dependencies | Manual (need/use) | None (automatic via sv) |
| Supervision | No built-in | Yes — auto-restart on crash |
| Logging | syslog or separate | Built-in per-service logging |
| Boot speed | Fast | Very fast |
| Complexity | Low | Low |
Should you use it?
Pick Runit if:
- You want the simplest possible supervision system
- You like the daemontools model (one script per service)
- You want auto-restart on crash
- You’re coming from Void Linux and want the same experience
Stick with OpenRC if:
- You need dependency management
- You prefer shell scripts with start/stop/status functions
- You want something more mainstream