快速业务通道

upstart 和ubuntu启动过程原理介绍

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10

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)以及ttyX.这rc-default就类似于那大名鼎鼎的inittab文件,它就是设置默认运行级别的[注:upstart中实际并没有运行级别的概念,这么称呼是为了init向后的兼容性].现在你应该知道了ubuntu里没有了inittab文件后该到哪里设置默认运行级别的了吧!cat rc-default一下吧!rcX文件是发生相应运行级别事件(可以注意到event这个词在upstart里真是无处不见啊)时,需要运行程序的脚本,而ttyX则是设置伪终端数目的,也就是你Ctrl Alt F(1~6)调出的那个Console.我们以rc2为例,cat rc2:

Empire CMS,phome.net

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/看看有些什

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号