6.52. Sysvinit-2.86

Sysvinit 软件包包含一些控制系统启动、运行、关闭的程序。

预计编译时间: 少于 0.1 SBU
所需磁盘空间: 1 MB

6.52.1. 安装 Sysvinit

当运行级别被改变(比如,正在关闭系统),init 向那些由 init 自身开启的,并且将不会在新的运行级别里运行的线程发送终端信号。当 init 做上面这些事情时,会输出像"Sending processes the TERM signal"这样的信息,这看起来就像它正在向那些系统正在运行的程序发送上面这些信息一样。要避免错误地理解这个信息,可以修改源码以便可以代替为读起来像"Sending processes started by init the TERM signal"的信息,可以用下面命令:

sed -i 's@Sending processes@& started by init@g' \
    src/init.c

编译软件包:

make -C src

这个软件包没有附带测试程序。

安装软件包:

make -C src install

6.52.2. 配置 Sysvinit

运行下面命令,创建一个新的 /etc/inittab 文件:

cat > /etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab
EOF

6.52.3. Sysvinit 的内容

安装的程序: bootlogd, halt, init, killall5, last, lastb(→last), mesg, mountpoint, pidof(→killall5), poweroff(→halt), reboot(→halt), runlevel, shutdown, sulogin, telinit(→init), utmpdump, wall

简要描述

bootlogd

把启动信息记录到一个日志文件

halt

正常情况下等效于 shutdown 加上 -h 参数(当前系统运行级别是 0 时除外)。它将告诉内核去中止系统,并在系统正在关闭的过程中将日志记录到 /var/log/wtmp 文件里。

init

当内核已经初始化硬件,接管引导程序,开启指令线程时,init 会被第一个启动。

killall5

发送一个信号到所有进程,但那些在它自己设定级别的进程将不会被这个运行的脚本所中断。

last

给出哪一个用户最后一次登录(或退出登录),它搜索 /var/log/wtmp 文件,出给出系统引导、关闭、运行级别改变等信息。

lastb

给出登失败的尝试,并写入日志 /var/log/btmp

mesg

控制是否允许其他用户也有向系统所有用户发送信息的权限

mountpoint

检查给定的目录是否是一个挂载点

pidof

报告给定程序的PID号

poweroff

告诉内核中止系统并且关闭系统(参见 halt)

reboot

告诉内核重启系统(参见 halt)

runlevel

告前一个和当前的系统运行级别,并且将最后一些运行级别写入 /var/run/utmp

shutdown

使系统安全关闭,向所有线程发送关闭信号并且通知所有已经登录的系统用户系统即将关闭。

sulogin

允许 root 登录,它通常情况下是在系统在单用户模式下运行时,由 init 所派生。

telinit

告诉 init 将切换到那一个运行级

utmpdump

以一个多用户友好的方式列出已经给出的登录文件的目录

wall

向所有已经登录的用户写入一个信息