Ⅰ Linux内核分析-启动顺序、运行级别及开机启动(七)
Linux内核分析-启动顺序、运行级别及开机启动一、启动顺序当我们经过BIOS引导,并选择了Linux作为准备引导的操作系统后,接下来的执行顺序如下:
加载并执行内核:
第一个被加载的就是内核,内核在内存中解压缩后开始运行。
/sbin/init进程:
init进程是第一个被启动的非内核进程,其进程编号PID总是1。
init进程读取配置文件/etc/inittab,决定需要启动的运行级别(Runlevel)。
执行/etc/rc.d/rc.sysinit,进行一系列初始化工作,包括设定PATH、网络配置、启动swap分区、设定/proc等。
启动内核模块:
依据/etc/moles.conf文件或/etc/moles.d目录下的文件来装载内核模块。
执行运行级别目录rcX.d下的脚本:
执行/etc/rc.d/rc和/etc/rc.d/rcX.d目录下的脚本,X为缺省运行级别。
执行/etc/rc.d/rc.local:
执行用户自定义启动脚本,用户可以把需要设置和启动的内容放到这里。
/sbin/mingetty /bin/login:
等待用户登录。
Linux一般会有7个运行级别,可由init N来切换(init 0为关机,init 6为重启系统):
要查看当前运行级别,可以用runlevel命令。配置文件/etc/inittab设置了默认的运行级别,例如id:3:initdefault:就设置了默认运行级别为3(完全多用户模式)。
三、关于/etc/rc.d/init.d目录运行级别与rcX.d:
在Linux中,每个运行级别可能需要启动的服务都不同。为了维护方便,在/etc/rc.d子目录中为每个运行级别建立一个对应的子目录,命名方法是rcX.d,X代表运行级别的数字。
rcX.d中放的都是符号链接,所有真正的启动脚本放置在/etc/rc.d/init.d下。当前目录对应的级别需要启动哪些程序,就为哪些启动脚本建立一个指向/etc/rc.d/init.d下对应文件的软链。
rcX.d中放置脚本的链接命名格式是:S{number}{name}和K{number}{name}。S开始的文件向脚本传递start参数,K开始的文件向脚本传递stop参数,number决定执行的顺序。
将程序控制脚本加入自动启动:
放在init.d目录下的控制脚本需要手动执行,如/etc/init.d/mysql start或service mysql start。
如果想要在特定运行级别自动启动某个服务,可以在对应的rcX.d下创建软链。例如,要让mysql在运行级别2和3启动时自动运行,可以给rc2.d和rc3.d下做软链。
Linux提供了一个命令chkconfig,用于简单设置服务的运行级别。使用语法包括chkconfig [--add][--del][--list][系统服务]或chkconfig [--level <等级代号>][系统服务][on/off/reset]。
例如,设置MySQL服务器在运行级别3和4上运行,只需三步:
为了确认配置修改成功,可以用list列出服务在不同运行级别的状态。
注意:每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行注释,第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级,第二行对服务进行描述。这两行注释是必须的,否则chkconfig --add会报错。