linux启动服务概述

阅读更多
        传统的linux中定义了七个运行级,分别如下:
        1、0级是完全关闭系统的级别。
        2、1级或S级代表单用户模式,会关闭所有的多用户和远程登录进程。
        3、2--5级是多用户级别。
        4、6级是“多重引导”级别。
        其中,0级和6级是不能让系统停留的,进入这两个级别的效果是关闭系统或者重新引导系统。在多数系统上,正常的多用户运行级别是2或3级,运行级5经常用于X Windows的登录进程,运行级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
        对于 Red Hat 和 Fedora 来说,init 都把运行级作为参数来调用脚本 /etc/rc.d/rc。/etc/rc.d/rc 一般运行在“正常”模式下,此时它只做它自己的事情。它也可运行在“确认”模式下,此时它在运行每个单独的启动脚本以前会询问用户。Red Hat 和 Fedora 有一个 chkconfig 命令来帮助用户管理服务。该命令可以在系统中增删启动脚本,也可以管理这些脚本执行的优先级,还能列出一个脚本目前为哪些运行级做了配置。Red Hat 还有一个 rc.lacal 脚本,是作为启动过程的一部分而运行的最后一个脚本,用户可以向其中添加自己定制的启动内容。Red Hat 引导过程的大多数配置应该通过操作 /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系统管理技术手册》第二章--引导和关机。

你可能感兴趣的:(linux,启动服务,运行级别)