Linux 启动(和停止)所有子系统的方式非常简单且模块化。 它允许您定义初始化顺序、运行级别 等
运行级别机制使 Linux 能够以不同的方式初始化自身。 并且还允许我们在不重启的情况下从一个配置文件(运行级别)更改为另一个配置文件。
示例 3. 中默认运行级别(在本例中为 3)行/etc/inittab
id:3:initdefault: |
运行级别是 0 到 6 的数字,每个运行级别都按照以下标准使用
您可以使用 telinit 命令从一个运行级别切换到另一个运行级别。 并且您可以使用 runlevel 命令查看当前运行级别和上一个运行级别。 请看下面我们如何从运行级别 3 切换到 5。
bash# runlevel N 3 bash# telinit 5 bash# runlevel 3 5 bash# |
子系统示例包括 Web 服务器、数据库服务器、OS 网络层等。 我们不会将面向用户的应用程序(如文本编辑器)视为子系统。
Linux 提供了一种优雅且模块化的方式来组织子系统的初始化。 需要考虑的一个重要事实是子系统之间的依赖关系。 例如,在基本网络子系统处于活动状态之前启动 Web 服务器是没有意义的。
子系统在/etc/init.d和/etc/rc.d/rcN.d目录下组织
所有已安装的子系统都在此目录中放置一个控制程序,该程序是一个脚本,它遵循下面描述的简单标准。 这是此目录的简化列表
示例 4. 安装在/etc/init.d
bash:/etc/init.d# ls -l -rwxr-xr-x 1 root root 9284 Aug 13 2001 functions -rwxr-xr-x 1 root root 4984 Sep 5 00:18 halt -rwxr-xr-x 1 root root 5528 Nov 5 09:44 firewall -rwxr-xr-x 1 root root 1277 Sep 5 21:09 keytable -rwxr-xr-x 1 root root 487 Jan 30 2001 killall -rwxr-xr-x 1 root root 7958 Aug 15 17:20 network -rwxr-xr-x 1 root root 1490 Sep 5 07:54 ntpd -rwxr-xr-x 1 root root 2295 Jan 30 2001 rawdevices -rwxr-xr-x 1 root root 1830 Aug 31 09:29 httpd -rwxr-xr-x 1 root root 1311 Aug 15 14:18 syslog |
这些目录必须仅包含指向/etc/init.d中脚本的特殊符号链接。 它的外观如下
示例 5./etc/rc3.d列表
bash:/etc/rc3.d# ls -l lrwxrwxrwx 1 root root 18 Jan 14 11:59 K92firewall -> ../init.d/firewall lrwxrwxrwx 1 root root 17 Jan 14 11:59 S10network -> ../init.d/network lrwxrwxrwx 1 root root 16 Jan 14 11:59 S12syslog -> ../init.d/syslog lrwxrwxrwx 1 root root 18 Jan 14 11:59 S17keytable -> ../init.d/keytable lrwxrwxrwx 1 root root 20 Jan 14 11:59 S56rawdevices -> ../init.d/rawdevices lrwxrwxrwx 1 root root 16 Jan 14 11:59 S56xinetd -> ../init.d/xinetd lrwxrwxrwx 1 root root 18 Jan 14 11:59 S75httpd -> ../init.d/httpd lrwxrwxrwx 1 root root 11 Jan 13 21:45 S99local -> ../rc.local |
示例 6. 中的子系统控制程序框架/etc/init.d
bash# /etc/init.d/mysystem Usage: mysystem {start|stop|restart|reload|condrestart|status} |
您实现的 mysystem 子系统方法将由用户使用 service 命令调用,如以下示例所示
示例 7. service 命令用法
bash# service mysystem start Starting MySystem: [ OK ] bash# service mysystem status Subsysten MySystem is active with pid 1234 bash# service mysystem reload Reloading MySystem: [ OK ] bash# service mysystem stop Stopping MySystem: [ OK ] bash# |
您不必担心管理/etc/rc.d/rcN.d中的符号链接。 chkconfig 命令会根据脚本开头定义的控制注释为您完成此操作。
示例 8. 使用 chkconfig 命令
bash# chkconfig --add mysystem bash# chkconfig --del mysystem |