一、启动次序

当我们经过BIOS引导,并选择了Linux作为打算引导的操作系统后,接出来的执行次序如下:

1、加载并执行内核

第一个被加载的东西就是内核。之后把内核在显存中解压缩,就可以开始运行了。

2、/sbin/init进程

init进程是接出来第一个被启动运行的(非内核进程),因而它的进程编号PID的值总是1。

2.1首先,init进程读取配置文件/etc/inittab,决定须要启动的运行级别(Runlevel),每位级别分别由0到6的整数表示。

2.2之后执行/etc/rc.d/rc.sysinit。它做的工作十分多,包括设定PATH、设定网路配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等

打算好以上一切过后linux 删除文件,系统开始步入用户层的初始化阶段。

3、启动内核模块:

根据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块

linux关机执行命令_linux关机命令halt_linux 30秒后关机命令

4、执行运行级别目录rcX.d下的脚本。

执行/etc/rc.d/rc和/etc/rc.d/rcX.d目录下的脚本。X为缺省运行级别。

5、执行/etc/rc.d/rc.local。

执行用户自定义启动脚本。你可以把你想设置和启动的东西放在这儿。

6、/sbin/mingetty/bin/login

等待用户登录

linux关机命令halt_linux关机执行命令_linux 30秒后关机命令

二、运行级别

Linux通常会有7个运行级别(可由initN来切换,init0为死机linux 30秒后关机命令,init6为重启系统)

0-停机

linux 30秒后关机命令_linux关机命令halt_linux关机执行命令

1-单用户模式

2-多用户,并且没有NFSlinux服务器配置与管理,不能使用网路

3-完全多用户模式

4-打黄酱的,没有用到

5-X11图形化登入的多用户模式

6-重新启动(假如将默认启动模式设置为6,Linux将会不断重启)

要查看当前运行级别,可以用runlevel命令

配置文件/etc/inittab设置了默认的运行级别。

如:id:3:initdefault:就设置了默认运行级别为3-完全多用户模式

三、关于/etc/rc.d/init.d目录

linux关机命令halt_linux关机执行命令_linux 30秒后关机命令

首先提及的这个目录和运行级别和开机手动启动都没关系,但开机启动会用到该目录下的脚本。

一般我们把系统各类服务的启动和停止脚本,都放到这个目录下。例如mysqldlinux 30秒后关机命令,ftpd,samba,zabbix等。这种脚本必须能接受start,stop参数,还有其它可选项:reload,restart,force-reload。

另外,为了少打几个字,系统默认建了一个软链接/etc/init.d指向它。

四、关于/etc/rc.d/rcX.d目录

1、运行级别与rcX.d

在Linux中,对每一个运行级别来说,可能须要启动的服务都不同。例如我有A,B,C,D四个应用服务,在level2,只须要运行A,B,C,在level3须要运行A,C,D,E。

正是这个缘由,假如单靠一个/etc/rc.d/rc脚本来控制,那将显得很庞大无法维护。那为了维护便捷,在/etc/rc.d子目录中构建一个对应的子目录。这种子目录的命名方式是rcX.d,其中的X就是代表运行级别的数字。例如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。

这儿要注意,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决定执行的次序

例如S6464mysqld表示执行/etc/rc.d/init.d/mysqldstart,以启动mysqld,启动次序排在64(启动次序按从小到大进行)

2、将程序控制脚本加入手动启动

置于init.d目录下的控制脚本,须要自动执行

例如,重新启动mysql服务:

/etc/init.d/mysqlstart或servicemysqlstart

假如想要Linux在运行级别为2或3启动时,手动mysql启动脚本如何办呢?可以给须要手动运行的级别对应的rcX.d下做软链:

#cd/etc/rc.d/init.d&&

#ln-sf../init.d/mysql../rc2.d/K64mysql&&

#ln-sf../init.d/mysql../rc3.d/K64mysql

假如要让每位运行级别都启动手动运行mysql,这么就要重复创建6个(除等级0)软链。

linux提供了一个命令:checkconfig。它提供了一种简单的方法来设置一个服务的运行级别。

使用句型:

chkconfig[--add][--del][--list][系统服务]或chkconfig[--level][系统服务][on/off/reset]

使用范例:

chkconfig–list列举所有的系统服务

chkconfig–addhttpd降低httpd服务

chkconfig–delhttpd删掉httpd服务

chkconfig–levelhttpd2345on

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复