linux启动服务概述
传统的linux中定义了七个运行级,分别如下:
1、0级是完全关闭系统的级别。
2、1级或S级代表单用户模式,会关闭所有的多用户和远程登录进程。
3、2--5级是多用户级别。
4、6级是“多重引导”级别。
其中,0级和6级是不能让系统停留的,进入这两个级别的效果是关闭系统或者重新引导系统。在多数系统上,正常的多用户运行级别是2或3级,运行级5经常用于XWindows的登录进程,运行级4很少使用,运行级1和S的定义在每种系统上是不同的。
每个运行级下运行的服务是不一样的,/etc/inittab规定了系统进入到每一级别时要运行的命令。在机器引导时,init从运行级0开始,逐级往上运行到在/etc/inittab中所设置的默认运行级别。当机器关闭时,又以相反的顺序执行同样的处理过程。
不过为了更灵活,linux通常采用“改变运行级”脚本的形式,由inittab来调用。这一脚本接下来执行位于与运行级有关的目录下的其它脚本,从而把系统带入到新的状态。
启动脚本的主拷贝位于/etc/init.d/目录下,每个脚本负责一个守护进程或者系统的某个特定方面。为方便管理,这些脚本都可接受参数start和stop,多数还接受restart,以便能快速启动或停止对应的服务。例如下面这个可以启动、停止或重新启动sshd服务的启动脚本:
#!/bin/sh test -f /usr/bin/sshd || exit 0 case "$1" in start) echo "Starting sshd." /usr/sbin/sshd ;; stop) echo "Stopping sshd." kill `cat /var/run/sshd.pid` ;; restart) echo "Stopping sshd." kill `cat /var/run/sshd.pid` echo "Starting sshd" /usr/sbin/sshd ;; *) echo "Usage: /etc/init.d/sshd start|stop|restart" exit 1 ;; esac
尽管/etc/init.d/中的脚本能启动和停止各个服务,但是由init运行的主控制脚本需要知道其它一些信息,这些信息说明了要进入任何指定的运行级别需运行哪些脚本。为简化操作,当主脚本把系统引入到一个新的运行级别时,它不是直接在init.d目录下找,而是查找叫做/etc/rcLEVEL.d/的目录,此处的LEVEL就是要进入的运行级别编号(例如rc0.d、rc1.d等)。这些/etc/rcLEVEL.d/目录包含了链接到/etc/init.d/目录中的服务的符号链接,它们的名称都以S或K开头,后跟一个数字以及该脚本所控制的服务名(例如,S55sshd等)。当init从低的运行级别向高的运行级别过渡时,它按照数字递增的顺序运行所有以S(表示start)开头的、带有start参数的脚本;当init从高的运行级别向低的运行级别过渡时,它按照数字递减的顺序运行所有以K(表示kill)开头的、带有stop参数的脚本。
这一机制让系统管理员可以细粒度地控制启动服务的顺序。所以在加入新服务时,一定要考虑到这种依赖关系。要告诉系统什么时候启动一个守护进程,我们必须在适当的目录下创建符号链接。例如,要告诉系统在运行级2期间启动CUPS并在系统关闭前妥善地停止这个守护进程,那么创建下面这一对链接就够了(有些系统以不同的方式处理系统关闭和重新引导,所以可能需要在/etc/rc6.d/目录中也放一个符号链接,以确保系统重新引导时,该守护进程能被正确关闭):
#ln-s/etc/init.d/cups/etc/rc2.d/S80cups
#ln-s/etc/init.d/cups/etc/rc2.d/K80cups
对于RedHat和Fedora来说,init都把运行级作为参数来调用脚本/etc/rc.d/rc。/etc/rc.d/rc一般运行在“正常”模式下,此时它只做它自己的事情。它也可运行在“确认”模式下,此时它在运行每个单独的启动脚本以前会询问用户。RedHat和Fedora有一个chkconfig命令来帮助用户管理服务。该命令可以在系统中增删启动脚本,也可以管理这些脚本执行的优先级,还能列出一个脚本目前为哪些运行级做了配置。RedHat还有一个rc.lacal脚本,是作为启动过程的一部分而运行的最后一个脚本,用户可以向其中添加自己定制的启动内容。RedHat引导过程的大多数配置应该通过操作/etc/sysconfig中的配置文件来完成。下表总结了/etc/sysconfig目录中一些项的功能:
文件/目录功能或内容clock指定系统有的时钟类型(几乎总是UTC)console一个总是为空的神秘目录httpd决定使用Apache的何种处理模式hwconf包含系统硬件的所有信息,由Kudzu使用i18n包含系统的本地设置(日期格式、语言等)init配置来自启动脚本的消息的显示方式keyboard设置键盘类型(使用us代表标准的101键美国键盘)mouse设置鼠标类型,由X和gpm使用network设置全局的网络参数(主机名称、网关、转发机制等)network-scripts包含补充脚本和网络配置文件的目录sendmail为sendmail设置选项
参考资料:《linux系统管理技术手册》第二章--引导和关机。