运行级别和启动脚本

init概述

init是系统引导起来后第一个运行的进程,从很多方面来说,它都是最重要的守护进程。它的进程号始终是1,而且是除了几个系统进程之外所有用户进程的祖先。

init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。而所有的动作都会通过 init的配置文件/etc/inittab来规划,而inittab 内还有一个很重要的设定内容,那就是默认的 run level (运行级别)。

init至少定义了7个run revel(运行级别),每一个运行级别都代表着系统应该补充运行的一组特定服务:

  • 0表示关机;
  • 1表示单用户;
  • 2表示没有网络的命令行级别;
  • 3命令行级别(大多服务器都用这个级别);
  • 4为保留级别;
  • 5为图形化级别;
  • 6为重启。

    启动脚本

一般的,我们都会将启动脚本拷贝到/etc/init.d目录下,每个脚本负责一个守护进程或者系统的某个特定方面。这些脚本都知道start和stop这两个参数表示它们所处理的服务是进行启动还是停止。大多数启动脚本还认识restart参数,该参数一般等同于先执行stop后再执行start。

当系统引入到一个新的运行级别时,它不是直接在init.d目录下寻找脚本,而是查找rc(level).d目录,这里的revel就要就进入的运行级别编号(例如rc0.d、rc1.d等)。rc(level).d目录下所包含的文件都会软链接到init.d目录下的启动脚本上,它们都以S或K开头(表示start或kill),后跟一个数字以及该脚本所控制的服务名。

/etc/rc(revel).d/目录大致内容如下所示:

# ll /etc/rc2.d/
总用量 0
lrwxrwxrwx. 1 root root 19 3月   2 19:37 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 18 3月   2 19:39 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx  1 root root 16 4月  26 02:20 K36mysqld -> ../init.d/mysqld
lrwxrwxrwx. 1 root root 15 3月   2 19:39 K50kdump -> ../init.d/kdump
lrwxrwxrwx. 1 root root 13 3月   2 19:38 K60nfs -> ../init.d/nfs
lrwxrwxrwx. 1 root root 18 3月   2 19:39 K61nfs-rdma -> ../init.d/nfs-rdma
lrwxrwxrwx. 1 root root 20 3月   2 19:38 K69rpcsvcgssd -> ../init.d/rpcsvcgssd
lrwxrwxrwx. 1 root root 15 3月   2 19:38 K71cgred -> ../init.d/cgred
lrwxrwxrwx. 1 root root 18 3月   2 19:38 K72cgconfig -> ../init.d/cgconfig
lrwxrwxrwx. 1 root root 19 3月   2 19:38 K74haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 15 3月   2 19:37 K75netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 17 3月   2 19:38 K85rpcgssd -> ../init.d/rpcgssd
lrwxrwxrwx. 1 root root 17 3月   2 19:38 K86nfslock -> ../init.d/nfslock
lrwxrwxrwx. 1 root root 21 3月   2 19:37 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 20 3月   2 19:37 K89netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 3月   2 19:37 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx  1 root root 23 4月  26 02:18 K95zabbix_agentd -> ../init.d/zabbix_agentd
lrwxrwxrwx. 1 root root 14 3月   2 19:39 S05rdma -> ../init.d/rdma
lrwxrwxrwx. 1 root root 19 3月   2 19:38 S08ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 3月   2 19:37 S08iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 17 3月   2 19:37 S10network -> ../init.d/network
lrwxrwxrwx. 1 root root 16 3月   2 19:39 S11auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 17 3月   2 19:38 S12rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 17 3月   2 19:36 S13rpcbind -> ../init.d/rpcbind
lrwxrwxrwx. 1 root root 19 3月   2 19:37 S15mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx. 1 root root 20 3月   2 19:36 S22messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 26 3月   2 19:38 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 19 3月   2 19:37 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx  1 root root 15 4月  25 22:25 S30nginx -> ../init.d/nginx
lrwxrwxrwx  1 root root 17 4月  27 01:22 S50php-fpm -> ../init.d/php-fpm
lrwxrwxrwx. 1 root root 14 3月   2 19:39 S55sshd -> ../init.d/sshd
lrwxrwxrwx  1 root root 20 4月  26 02:12 S86keepalived -> ../init.d/keepalived
lrwxrwxrwx  1 root root 21 3月  11 02:53 S97salt-minion -> ../init.d/salt-minion
lrwxrwxrwx. 1 root root 11 3月   2 19:37 S99local -> ../rc.local

当init从低运行级别向高级过渡时,会按照数字的递增顺序,带start参数执行所有以S开头的脚本;当init从高运行级别向低级别过渡时,则按照数字的递减顺序,带stop参数执行所有以K开头的脚本。

这种机制能让系统管理员更加细微力度地控制启动服务的顺序,但在加入新服务的时候,应当考虑到启动脚本之间的一些依赖关系。例如,在网络服务network启动之前先启动sshd就没有意义。虽然他们都配置了在2 revel启动,但是network的脚本序号为10,而sshd的序号为55,所以network服务肯定先运行。

还有一个在系统引导时运行的/etc/rc.local脚本。它作为启动过程的一部分,是最后一个运行的脚本,我们一般把一些特有的启动项或启动之后的任务加入这个脚本。

标签: none

添加新评论