7.3. 这些启动脚本如何工作?

Linux 使用名为 SysVinit 的特殊启动工具,它基于运行级别的概念。它在不同的系统上可能差异很大,因此不能假定在某个特定的 Linux 发行版中可以工作,在 LFS 中也应该以相同的方式工作。LFS 有自己做事的方式,但它尊重普遍接受的标准。

SysVinit(从现在开始将被称为 “init”)使用运行级别方案工作。有七个(编号为 0 到 6)运行级别(实际上,还有更多的运行级别,但它们用于特殊情况,通常不使用。请参阅init(8)以获取更多详细信息),并且每个运行级别都对应于计算机启动时应执行的操作。默认运行级别为 3。以下是运行级别的描述,因为它们已实现

0: 停止 计算机
1: 单用户 模式
2: 多用户 模式 ,不带 网络
3: 多用户 模式 ,带 网络
4: 保留 用于 自定义,否则 与 3 相同
5: 与 4 相同,通常 用于 GUI 登录(例如 X 的  xdm 或 KDE 的  kdm
6: 重启 计算机

用于更改运行级别的命令是 init [运行级别],其中 [运行级别] 是目标运行级别。例如,要重启计算机,用户可以发出 init 6 命令,它是 reboot 命令的别名。同样,init 0halt 命令的别名。

/etc/rc.d下有许多目录,看起来像rc?.d(其中 ? 是运行级别的编号)和rcsysinit.d,所有这些目录都包含许多符号链接。有些以 K 开头,另一些以 S 开头,并且它们都以两个数字跟随初始字母。K 表示停止(kill)服务,S 表示启动服务。数字确定脚本的运行顺序,从 00 到 99——数字越低,执行得越早。当 init 切换到另一个运行级别时,相应的服务将被启动或停止,具体取决于选择的运行级别。

真正的脚本位于/etc/rc.d/init.d。它们完成实际工作,并且符号链接都指向它们。杀死链接和启动链接都指向/etc/rc.d/init.d中的同一个脚本。这是因为可以使用不同的参数(如 startstoprestartreloadstatus)调用脚本。当遇到 K 链接时,将使用 stop 参数运行相应的脚本。当遇到 S 链接时,将使用 start 参数运行相应的脚本。

对此解释有一个例外。在rc0.drc6.d目录中以 S 开头的链接不会导致任何内容启动。它们将使用参数 stop 调用以停止某些内容。这背后的逻辑是,当用户要重启或停止系统时,不需要启动任何内容。系统只需要停止。

以下是参数使脚本执行的操作的描述

start

服务已启动。

stop

服务已停止。

restart

服务已停止,然后重新启动。

reload

服务的配置已更新。这在修改了服务的配置文件后使用,此时服务不需要重新启动。

status

告知服务是否正在运行以及使用哪个 PID。

请随意修改启动过程的工作方式(毕竟,这是您自己的 LFS 系统)。此处给出的文件是如何完成此操作的示例。