Benefits
How to replace init
How to use dietlibc
Runlevels
Dependencies
A collection of run scripts
The runit program
The runit-init program
The runsvdir program
The runsv program
The runsvchdir program
The utmpset program
The svwaitdown program
The svwaitup program
The runsvstat program
(not installed by default)
The runsvctrl program
(not installed by default)
Warning: Replacing sysvinit or init can cause the system's boot to fail. Make sure you are able to recover and repair your system, for example if you run a boot loader, it should be able to pass init=/bin/sh to the kernel.
runit performs the system's booting, running and shutting down in three stages:
The command runit-init is intended to replace /sbin/init. sysvinit's command shutdown will keep working. On *BSD systems use init 0 for system halt and init 6 for reboot. Runlevels are handled through the runsvdir and runsvchdir programs. Service dependencies are rudimentarily handled through the svwaitup and svwaitdown programs, see Dependencies and runlevels for an example.
runit is optimized for reliability and small size. The amount of code in process no 1 should be minimal.
# strings /proc/1/exe |grep Id
$Id: runit.c,v 1.7 2002/02/13 09:59:52 pape Exp $
# uptime
14:36:29 up 88 days, 1:51, 2 users, load average: 0.20, 0.13, 0.04
# ps axuw |head -n20
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 20 16 ? S 2002 0:05 runit
root 2 0.0 0.0 0 0 ? SW 2002 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SWN 2002 0:00 [ksoftirqd_CPU0]
root 4 0.0 0.0 0 0 ? SW 2002 0:16 [kswapd]
root 5 0.0 0.0 0 0 ? SW 2002 0:00 [bdflush]
root 6 0.0 0.0 0 0 ? SW 2002 0:01 [kupdated]
root 168 0.0 0.2 1652 584 ? S 2002 0:00 /usr/sbin/cron
root 174 0.0 0.0 36 24 ? S 2002 0:00 runsvdir /service log: ........................................................................................................
root 176 0.0 0.0 20 20 ? S 2002 0:00 runsv qmail-send
root 177 0.0 0.0 20 20 ? S 2002 0:00 runsv getty-5
root 178 0.0 0.0 20 20 ? S 2002 0:00 runsv getty-4
root 179 0.0 0.0 20 20 ? S 2002 0:00 runsv getty-3
root 180 0.0 0.0 20 20 ? S 2002 0:00 runsv getty-2
root 181 0.0 0.0 20 20 ? S 2002 0:00 runsv qmail-smtpd
root 182 0.0 0.0 20 20 ? S 2002 0:00 runsv socklog-unix
root 183 0.0 0.1 1256 384 tty5 S 2002 0:00 getty 38400 tty5 linux
root 184 0.0 0.1 1256 384 tty3 S 2002 0:00 getty 38400 tty3 linux
root 185 0.0 0.0 20 20 ? S 2002 0:00 runsv socklog-klog
root 186 0.0 0.0 20 20 ? S 2002 0:00 runsv ssh
# pstree
runit-+-bdflush
|-cron
|-keventd
|-ksoftirqd_CPU0
|-kswapd
|-kupdated
`-runsvdir-+-runsv-+-multilog
| `-qmail-send-+-qmail-clean
| |-qmail-lspawn
| `-qmail-rspawn
|-4*[runsv---getty]
|-runsv-+-multilog
| `-tcpserver---qmail-smtpd
|-2*[runsv-+-multilog]
| `-socklog]
|-runsv-+-multilog
| `-sshd-+-2*[sshd---sshd---tail]
| |-sshd---sshd---bash
| `-sshd---sshd---bash---bash---pstree
|-runsv---clockspeed
|-runsv-+-dnscache
| `-multilog
|-runsv---apache-ssl-+-20*[apache-ssl]
| |-gcache
| `-4*[multilog]
|-6*[runsv-+-multilog]
| `-tcpserver]
|-3*[runsv-+-multilog]
| `-tinydns]
`-runsv---uncat
This is from a more busy system:
# strings /proc/1/exe |grep Id $Id: runit.c,v 1.6 2002/01/29 18:56:36 pape Exp $ # uptime 15:04:34 up 201 days, 15:34, 3 users, load average: 0.08, 0.03, 0.01 # ps axuw |head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 24 0 ? SW Feb07 0:05 runit root 2 0.0 0.0 0 0 ? SW Feb07 0:01 [keventd] root 3 0.0 0.0 0 0 ? SW Feb07 1:45 [kapm-idled] root 4 0.0 0.0 0 0 ? SWN Feb07 1:21 [ksoftirqd_CPU0] root 5 0.0 0.0 0 0 ? SW Feb07 31:40 [kswapd] root 6 0.0 0.0 0 0 ? SW Feb07 0:06 [bdflush] root 7 0.0 0.0 0 0 ? SW Feb07 14:26 [kupdated] root 53 0.0 0.0 0 0 ? SW Feb07 0:00 [msp3410 [auto]] daemon 115 0.0 0.0 1412 0 ? SW Feb07 0:00 /sbin/portmap
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 20 16 ? S 2002 0:02 runitI recommend doing this; for instructions, see How to use dietlibc.