文章目录

1.Linux的引导过程

系统启动以后,在步入init.d之前,我们先来瞧瞧系统都做了哪些工作。系统加电以后,首先进行的硬件自检,之后是bootload对系统的初始化,加载内核。

内核被加载到显存以后linux自启动c程序,就开始执行了。一旦内核启动运行,对硬件的测量都会决定须要对什么设备驱动进行初始化。

从这开始,内核就才能挂装根文件系统(这个过程类似于Windows辨识并存取C盘的过程)。内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等以后,就通过启动一个叫init的用户级程序,完成引导进程。

2.运行级别(runlevel)

启动程序命令_启动程序停车_linux自启动c程序

Init进程是系统启动以后的第一个用户进程,所以它的pid(进程编号)一直为1。init进程上来首先做的事是去读取/etc/目录下inittab文件中initdefaultid值,这个值称为运行级别(run-level)。它决定了系统启动以后运行于哪些级别。运行级别决定了系统启动的绝大部份行为和目的。这个级别从0到6,具有不同的功能。不同的运行级定义如下:

# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 – 系统保留的
# 5 - X11 (x window)

启动程序命令_linux自启动c程序_启动程序停车

# 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )   

inittab文件中initdefaultid:

在这里插入图片描述

3./etc/rc.d/与/etc/rc.d/init.d的关系

linux自启动c程序_启动程序命令_启动程序停车

讲到这儿,应当差不多要步入init.d了,但是我认为单写/etc/rc.d/init.d的话不一定能说得清楚明白,就拿它跟/etc/rc.d这个它上一级的目录一上去讨论,可能比较合适一些,由于她们之间有着千丝万缕的关系。

在这儿先解释一下init.d上面放的都是哪些东西。这个目录储存的是一些脚本,通常是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了很多rpm包,这儿面就有好多对应的脚本。执行这种脚本可以拿来启动,停止,重启这种服务。

后面说到,/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时侯执行。程序运行到这儿(init进程读取了运行级别),相信从命名的角度你们也能猜到该运行/etc/rc.d/init.d上面的脚本了,不然它为何也叫init(.d)呢是吧。没错,是该运行init.d里的脚本了红旗linux系统,而且并不是直接运行,而是有选择的,由于系统并不须要启动所有的服务。

这么,系统是怎样选择什么须要启动什么不要呢?这时刚刚说的运行级别就起作用了。在决定了系统启动的runlevel以后,/etc/rc.d/rc这个脚本先执行。在RH9和FC7的源码中它都是一上来就check_runlevel()(尽管实现的代码不一样,也太原小异),晓得了运行级别以后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d……rc6.d。每位目录下都是到init.d目录的一部份脚本一些链接。每位级别要执行什么服务就在相对应的目录下,例如级别5要启动的服务就都置于rc5.d下,并且置于这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活到init.d里的脚本。

到这儿,恐怕你们可能都比较清楚了,我开始也以为是这样的。但是后来我仔细看过和比较这种链接文件和init.d里真正被执行的脚本的文件名以后,仍然有几个问题没弄明白。借着写这个文章的机会,我做了一些功课,终于是大约解开了这些疑问。

1、这些链接文件后面为何会带一个Kxx或则Sxx呢?

linux自启动c程序_启动程序命令_启动程序停车

是这样的,带K的表示停止(Kill)一个服务,S表示开启(Start)的意思

2、K和S前面带的数字呢?干哪些用的

这个我开始的时侯还以为是排列上去好看或则数数用呢。后来发觉不是的。它的作用是拿来排序,就是决定这种脚本执行的次序,数值小的先执行,数值大的后执行。好多时侯那些执行次序是很重要的,例如要启动Apache服务,就必须先配置网路插口,不然一个没有IP的机子来启动http服务那岂不是很恶搞。。。

3、无意中我发觉同一个服务带S的和带K的链接到init.d以后是同一个脚本。我就恼火了红旗linux桌面版,为何会是执行同一个脚本呢?

这个时侯真是S和K的妙用了,原先S和K并不止是用来看上去分的清楚而已。S给和K还分别给init.d下边的脚本传递了start和stop的参数。哦,是这样的(焕然大悟的样子,呵呵)!这时我才想上去原先以前无数用过的/etc/rc.d/init.d/networkrestart命令。原先传S时相当于执行了/etc/rc.d/init.d/xxxstart这条命令,其实K就相当于/etc/rc.d/init.d/xxxstop了。

4./etc/init.d是指向/etc/rc.d/init.d的软链接。

以上是转载的他人转载的干货,原出处不晓得。

linux自启动c程序_启动程序停车_启动程序命令

然而这个真的解了我很长时间的惑,原先servicenetworkrestart和/etc/rc.d/init.d/networkrestart的疗效一样是这样来的啊,可以说是讲的十分清楚了。

thanks!!!

假如要新增一个服务例如Tomcat,要设置开机自启动linux自启动c程序,这么可以在/etc/rc.d/init.d下添加一个Tomcat服务,写上自启动脚本,之后添加开机自启动权限chkcofigtomcaton

要用servicenetworkrestart这样的命令的话似乎须要chkconfigadd加权限,这个还要研究!

原文链接:

Tagged:
Author

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

刘遄

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

发表回复