2. 运行级别

与系统启动相关的全部文件都存放在 /etc/rc.d 目录。这是该目录的文件列表:

$ ls /etc/rc.d
init.d/  rc0.d/  rc2.d/  rc4.d/  rc6.d/            rc.local*    rc.sysinit*
rc*      rc1.d/  rc3.d/  rc5.d/  rc.alsa_default*  rc.modules*

和我们先前介绍的一样,系统运行的第一个文件就是 rc.sysinit。它的责任是设置计算机的基本配置:键盘类型、特定设备的配置、文件系统检查,等等。

然后会运行 rc 脚本,并将需要的运行级别作为参数。我们在上面已经看到过了,运行级别不过只是一个整数,而且对每个已定义的运行级别 <x>,必定有一个与其对应的 rc<x>.d 目录。在一个典型的 Mandriva Linux 安装中,您将会看到六个运行级别:

现在,让我们来看一下 rc3.d 目录中的内容:

$ ls /etc/rc.d/rc3.d/
K09dm@         S12syslog@   S24messagebus@     S40atd@         S91dictd-server@
S01udev@       S13partmon@  S25haldaemon@      S55sshd@        S92lisa@
S03iptables@   S15cups@     S25netfs@          S56ntpd@        S95kheader@
S05harddrake@  S17alsa@     S29numlock@        S56rawdevices@  S99local@
S10network@    S18sound@    S33nifd@           S75keytable@
S11shorewall@  S20xfs@      S34mDNSResponder@  S90crond@
$

正如您看到的,此目录中的全部文件都是符号链接,而且它们的文件名格式还十分规范。一般的格式为:

<S|K><顺序><服务名>

S 代表启动(Start)服务,K 代表杀死(Kill) (停止)服务。脚本会按照增序逐个运行,如果两个脚本的编号相同,那么就会按照字母的升序运行。我们还可以看到,每个符号链接都指向 /etc/rc.d/init.d 目录中的给定脚本(除了负责控制某项特定服务的 local 脚本)。

当系统进入给定的运行级别时,系统会先按顺序运行 K 链接:rc 命令会查找链接指向的目标,然后带加上单个参数 stop 来调用相应的脚本。然后,再按相同的方法运行 S 脚本,只是参数换成了 start

现在,我们暂且不论脚本本身的功能。可以知道,当系统进入运行级别 3 时,会首先运行 K09dm 命令(即 /etc/init.d/dm stop)。然后再运行全部 S 脚本:先是 S01udev,也就是调用 /etc/rc.d/init.d/udev start,然后是 S03iptables,依此类推。

掌握了这一信息,您就可以在几分钟之内创建您自己的完整的运行级别(例如,使用运行级别 4),或者通过删除相应的符号链接来启动或停止服务。

2.1. 配置运行级别中的服务

您还可以使用 chkconfig 命令添加、删除、激活或禁用给定运行级别的服务。使用 chkconfig --add 服务名 可将服务名添加(激活)到支持的[30]全部运行级别,而chkconfig --del 服务名可从所有运行级别中删除(取消)指定的服务。

[提示]提示

执行 chkconfig --list 可了解哪些服务是可用的,这些服务的名称,以及这些服务在已定义的全部运行级别中的状态。

执行 chkconfig --levels 35 sshd on 将在运行级别 3 和 5 上激活 SSH 服务器,而执行 chkconfig --levels 3 sound off 将从运行级别 3 中删除声音支持。如果您省略 --levels 级别列表选项,则给出的服务将在在运行级别 2、3、4 和 5 中启用或禁用。但是,您应该注意到,您有可能在无意间在本不支持相应服务的运行级别中启用该服务,所以最好还是指定要影响的运行级别比较好。

2.2. 控制运行中系统的服务

您也可以 service 命令控制运行中系统的服务是否要在特定的运行级别中运行。其语法为:

service 服务名 动作

这里 服务名 是服务的名称,与 chkconfig --list 列出的名称相同,而动作可以为下列选项之一:

start

启动指定的服务。请注意,大多数服务将会在服务已经启动且您尝试再次启动时给您提出警告:您应该换用 restart,参看下文。

stop

停止给定的服务。请注意,当您停止服务时,连接到此服务的所有用户都会被自动断开。

restart

停止然后再启动指定的服务。此命令一般等同于运行 service 服务名 stop && service 服务名 start。请注意,当您重新启动服务时,连接到此服务的所有用户都会被自动断开。

与具体服务相关的其它操作

不同的服务支持不同的操作(所有服务都支持先前的几个操作)。例如,reload 可重新装入服务的配置文件而无需重新启动服务;status 可向您通告服务的状态;等等。运行 service 服务名可向您提示该服务可执行的全部操作。



[30] “支持的”运行级别的意思类似于,网络相关的服务不会被添加到级别 2,这意味着该级别不支持网络。