一、启动次序
当我们经过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目录下的文件来装载内核模块
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通常会有7个运行级别(可由initN来切换,init0为死机linux 30秒后关机命令,init6为重启系统)
0-停机
1-单用户模式
2-多用户,并且没有NFSlinux服务器配置与管理,不能使用网路
3-完全多用户模式
4-打黄酱的,没有用到
5-X11图形化登入的多用户模式
6-重新启动(假如将默认启动模式设置为6,Linux将会不断重启)
要查看当前运行级别,可以用runlevel命令。
配置文件/etc/inittab设置了默认的运行级别。
如:id:3:initdefault:就设置了默认运行级别为3-完全多用户模式
三、关于/etc/rc.d/init.d目录
首先提及的这个目录和运行级别和开机手动启动都没关系,但开机启动会用到该目录下的脚本。
一般我们把系统各类服务的启动和停止脚本,都放到这个目录下。例如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