runit是一组程序,可以用来引导系统、启动监督服务、记录服务日志等。
使用了runit的操作系统:
Debian GNU/Linux (as alternative init scheme)
FreeBSD
OpenBSD
NetBSD
Ubuntu (as alternative init scheme)
Gentoo
Linux from Scratch
Finnix
SME server
Linux-VServer
T2
GoboLinux
Dragora GNU/Linux (as default init scheme)
ArchLinux
OpenSDE
Zinux Linux (as default init scheme)
deepOfix Mail Server (as default init scheme)
Void Linux (as default init scheme)
runsvdir是runit中一个程序,用来启动监督服务。
runsvdir [-P] dir [ log ]
runsvdir加载指定目录的子目录中的服务文件,并调用runsv将服务启动。
runsv命令用来启动并监督服务。
runsv service
service必须是一个目录,runsv进入目录中,执行./run
。
./run退出后,如果存在./finish,执行./finish
,然后重新执行./run,否则直接执行./run。
如果./run和./finish立即退出,runsv等待1秒后,再启动./finish ./run。
runsv会向./finish传入两个参数:
参数1,./run的exit code,-1,非正常退出,0,正常退出
参数2,waitpid获取的退出状态,
如果目录中有down
文件,runsv不重新启动./run。
如果目录中有log
目录,runsv创建一个pipe,./run和./finish的标准输出重定向到pipe,然后启动log/run
,log/run将pipe作为标准输入。
runsv将服务的状态保存在supervise
目录中,其中status文件是二进制格式的,其它文件是文本格式的。
svslogd持续的从标准输入读取数据,然后将读取的数据写入到指定的目录中。
svlogd [-tttv] [-r c] [-R xyz] [-l len] [-b buflen] logs