2018/03/15

理解linux rc.d启动过程


rc.d启动过程

1、
linux系统启动内核完成后,将会调用第一个进程,那就是 /sbin/init ,所以此 init 的进程 PID 将一定为1,我们可以通过ps指令来查看一下:

# ps -ef | head
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Mar14 ?        00:00:00 /sbin/init

接着 init 进程就会通过 /etc/inittab 的配置文件进行初始化工作,此配置文件主要配置了我们系统的运行等级:
id:3:initdefault:
表明linux运行在等级3上。linux的运行等级在/etc/inittab都有说明,设定如下:

#0  停机(千万不能把initdefault 设置为0)
#1  单用户模式
#2  无网络支持的多用户模式,也就是没有NFS
#3  有网络支持的多用户模式
#4  保留,未使用
#5  有网络支持有X-Window支持的多用户模式
#6  重新启动(千万不要把initdefault 设置为6)

2、
init 进程调用 /etc/rc.d/rc.sysinit 进行系统初始化

3、
init 进程调用 /etc/rc.d/rc 程序,根据上面/etc/inittab配置的运行等级,rc 进程去调用 /etc/rc.d/rcN.d/ 目录下的脚本程序
此处运行等级为3,所以会调用 /etc/rc.d/rc3.d/ 目录下的脚本程序

4、
执行/etc/rc.d/rc.local程序
rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。你可以把你想设置和启动的脚本放到这里。

5、
执行 /bin/login 程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。


rcN.d目录下脚本命名说明

所有 /etc/rc.d/rcN.d/ 目录下的脚本都是对 /etc/rc.d/init.d/ 的软链。

/etc/rc.d/rcN.d/ 目录下的脚本命名规则是:

S/K + 数字 + 脚本名

S 代表 start ,系统启动时运行的脚本
K 代表 kill ,系统关闭时运行的脚本
数字 代表 排序,数字越小执行优先级越高,也就是说 S08iptables 执行优先级高于 S99local
脚本名 对应 /ecc/rc.d/init.d/ 目录下同名脚本


添加系统启动关闭执行脚本

直接添加

直接在 /ect/rc.d/rc.local 文件里添加自己需要执行的内容

使用chkconfig

使用 chkconfig 命令,步骤如下:

1、在 /etc/rc.d/init.d/ 目录下添加shell脚本,脚本头部必须带有 chkconfig 说明内容,eg:

#!/bin/bash

#chkconfig:2345 70 30
#description:this is test shell

mkdir /tmp/chktest

#chkconfig:2345 70 30 指明添加到哪几个运行等级上,启动数字优先级,关闭优先级
#description:this is test shell 脚本功能描述

2、将脚本添加可执行权限:
chmod +x xxx.sh

3、使用chkconfig将此脚本添加进系统服务
chkconfig --add xxx.sh

我们可以通过 chkconfig --list 查看已添加系统服务的列表