全部博文(685)
分类: LINUX
2015-03-12 10:59:32
标准的linux启动顺序是:
(1)init根据/etc/inittab来配置系统-->
(2)执行脚本/etc/rc.d/rc.sysinit初始化-->
(3)然后根据启动等级执行/etc/init.d/rc,执行等级作为参数传入
(4)跳到/etc/rcN.d/(N为执行等级),执行里面的文件,其中大部分为指向/etc/init.d/下面的文件,启动相关服务。
这种串行的启动机制被称为 System V Init
机制,这种机制启动较慢,upstart机制就是其的替代机制,也就是现在ubuntu中所使用的机制。下面这两篇文章对upstart机制做了很详细地说明:
http://blog.csdn.net/vecri/article/details/4735601
由于需要和第三方软件兼容,现在的ubuntu中使用的是System V Init
和upstart机制结合的方式。观察ubuntu10.04的文件系统可以发现:
1 没有标准init进程中的/etc/inittab以及rc.sysinit文件。
2 没有标准Upstart中初始化用的rc-default文件以及事件触发目录 /etc/event.d。
3 Ubuntu已经不再严格区分各个启动等级(Runlevel)了。
在Ubuntu中,和init有关的就是/etc/init /etc/init.d
/etc/rcN.d了(N为启动等级Runlevel,S代表单用户模式)。注意。这里的init,指的是基于Upstart的初始化进程。
Ubuntu启动顺序是:
(1)init读取/etc/init/rc-sysinit.conf文件来确定启动等级,关键内容如下:
# Default runlevel, this may be overriden on the kernel
command-line
# or by faking an old /etc/inittab entry
env
DEFAULT_RUNLEVEL=2
......
# Check for default runlevel in
/etc/inittab
==> 说明ubuntu并没有完全忽视inittab文件的存在
仍然可以使用inittab文件来自定义运行级别
if [ -r /etc/inittab ]
then
eval "$(sed -nre
's/^[^#][^:]*:([0-6sS]):initdefault:.*/DEFAULT_RUNLEVEL="\1";/p' /etc/inittab ||
true)"
fi
......
(2)传递参数给/etc/init.d/rc
(3)根据参数执行/etc/rcN.d/下面的链接文件,这点跟其他的是相同的。注意,根据运行级别来裁剪服务在ubuntu中可能会失效,但是可以改写/etc/rcN.d/下面的脚本来实现。
参考:
http://blog.sina.com.cn/s/blog_40355af20100s4gs.html