upstart和ubuntu启动历程原理介绍[Linux安全]
本文“upstart和ubuntu启动历程原理介绍[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
ubuntu从6.10开始渐渐用upstart替换本来的sysinit,举行服务进程的管理.也恰是从6.10开始,ubuntu的启动历程开始变得有点“变化多端”.也没办法,这是正在开辟中的upstart不可避免的.为了对原有的init实现向后兼容,upstart可以说是在表象上保存了大部份本来init的特点,因而目前linux初始化进程名仍旧叫init,而改变的核心,乃是Event机制.理解并讲清楚这个改变的重要意义和内涵机理可不是件简单的事,所以我只打算研究一下目前 upstart(0.3.9, ubuntu 8.04)在系统启动中的表象行为.[注:据Scott James Remnant在其博客上所说,upstart 0.5.0版本将在将来几周公布.]
关于系统启动,熟习Linux的人大多应当知道,init进程(PID=1)乃是全部进程的父进程,全部进程由它掌握.init进程的运行时间是内核完成文件系统的加载后.那么init进程是若何开启系统中的别的进程的呢?在阐述这个问题之前,大致地阐明一下目前ubuntu中与init相关的几个目录和利用程序,可以便利背面的阐述.这些目录和程序包含:
init
telinit
runlevel
/etc/event.d/ /etc/init.d/ /etc/rcX.d/
前三个是利用程序(注意哦,它们都不是shell脚本),可以理解为是由内核调用的.关于它们的功效,从manpage查看便可以了.我们的重点是背面给出的三个目录.
首先是/etc/event.d/目录,这是upstart的核心,upstart差别于原有的init的地方就在于它引入了event机制.Event 机制通俗的讲就是将全部进程的触发、终止等等都看做event(事件)./etc/event.d/中就存放了目前upstart需求辨认的event.这此中主要有三种rc-default, rcX(x=0,1,...6,S.sysv-rc-conf这个工具里就显示了0,1,...6,S这几个级别)以及ttyX.这rc-default 就近似于那大名鼎鼎的inittab文件,它就是设置默许运行级别的 [注:upstart中实际并没有运行级别的概念,这么称谓是为了init向后的兼容性].目前你应当知道了ubuntu里没有了inittab文件后该到那边设置默许运行级别的了吧!cat rc-default一下吧!rcX文件是发生呼应运行级别事件(可以注意到event这个词在upstart里真是无处不见啊)时,需求运路程序的脚本,而ttyX则是设置伪终端数目的,也就是你Ctrl+Alt+F(1~6)调出的那个Console.我们以rc2为例,cat rc2:
start on runlevel 2
stop on runlevel [!2]
console output
script
set $(runlevel --set 2 || true)
if [ "$1" != "unknown" ]; then
PREVLEVEL=$1
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
fi
exec /etc/init.d/rc 2
end script
..
不去考虑细节,只要注意到前两行和倒数第二行便可以了.可以看到,rc2文件是定义在发生运行级别2的时刻所要履行的东西,核心就是这句:exec /etc/init.d/rc 2.这样,我们便可以自然地过渡到下一个重要的目录,/etc/init.d/了.
你可以ls /etc/init.d/看一下里面的内容,对它有个大致的理解./etc/init.d/中存放的是服务(services)大概任务(tasks)的履行脚本.可以这么说,只要你安装了一个程序(分外是服务程序daemon),它可以在系统启动的时刻运行,那么它一定会在/etc/init.d/中有一个脚本文件.我们还回到上面的rc2文件,它履行了一个exec /etc/init.d/rc 2的号令.也就是说,给/etc/init.d/rc脚本传送了一个参数"2",让它履行.我们细心查看一下rc脚本(很长,耐烦点),能看到这样的一段:
# Now run the START scripts for this runlevel.
# Run all scripts with the same level in parallel
....... for s in /etc/rc$runlevel.d/S* .......
这阐明,当给rc脚本传送一个数字参数"X"的时刻,它在经过一系列的设置后,将会开始履行/etc/rcX.d/下S开首的脚本.这就过渡到下一个目录/etc/rcX.d/了.
进入/etc/rcX.d/,ls -l /etc/rcX.d/看看有些什么内容?哈哈,没错,都是一些到/etc/init.d/中脚本的标记链接.差别的是它们的开首加上了S和一个数字.熟习本来init的人应当知道,S表示在启动时运行,数字则表示履行的先后次序.
这样一来,upstart管理的ubuntu启动历程应当就清楚了.梳理一下:1,内核启动init 2,init找到/etc/event.d/rc-default文件,肯定默许的运行级别(X) 3,触发呼应的runlevel事件,开始运行/etc/event.d/rcX 4,rcX运行/etc/init.d/rc,传入参数X 5,/etc/init.d/rc脚本举行一系列设置,最后运行呼应的/etc/rcX.d/中的脚本6,/etc/rcX.d/中的脚本按事前设定的优先级顺次启动,直至最后给出登录画面(启动X服务器和GDM)
理解了这些,手动配置开机服务的启动与否就很简单了.Ubutnu默许的启动级别是2,不想启动的程序,只要把呼应的标记链接从/etc/rc2.d/中删去便可!
以上是“upstart和ubuntu启动历程原理介绍[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |