了解RHEL6的Upstart

2010年12月30日 Linux基础 评论 2 条 阅读 14,086 views 次

今天在学习Linux启动流程的时候,发现了/etc/inittab这个文件里面的内容和以前的版本相差很多,在RHEL6中,这个文件中只能设置运行的等级了,其它的相关设置全部移动到/etc/init/里面了。经查询才知道,红帽使用新的Upstart启动服务来替换以前的init。
我们可能通过man inittab来查看

DESCRIPTION
       The /etc/inittab file was the configuration file used by the original System V init(8) daemon.

       The Upstart init(8) daemon  does  not  use  this  file,  and instead  reads  its  configuration  from files in /etc/init.
       See init(5) for more details.

UpStart: 基于事件的启动系统
Sysvinit:基于结果的启动系统

 

SysVinit守护进程(sysvinit软件包)是一个基于运行级别的系统,它使用运行级别(单用户、多用户以及其他更多级别)和链接(位于/etc /rc?.d目录中,分别链接到/etc/init.d中的init脚本)来启动和关闭系统服务。Upstart init守护进程(upstart软件包)则是基于事件的系统,它使用事件来启动和关闭系统服务。

几个很重要的定义
event: 事件, 是指系统状态的一种改变,这种改变会被通知给init进程。举例来说,boot loader会触发startup事件,系统进入runlevel 2的时候会触发runlevel 2事件,某个文件系统被挂载时会触发path-mounted事件, USB设备的插拔也都会产生相应的事件。这些时间会被通知给init进程,然后init进程来决定系统如何处理这些事件。
job: 作业,一项作业是init进程读入的一系列指令。你可以使用initctl start或initctl stop命令来开始或停止某项作业,这是调用作业的一种方式。另一种方式是当系统被告知发生什么事件event后,运行该事件所对应的作业。可用sudo initctl list命令列出所有系统作业的运行状态。
task: 任务, a job that performs its work and returns to a waiting state when it is done. 中文是一种完成指定工作后进去等待状态的作业。
service: 服务,a job that does not normally terminate by itself. 举个例子来说, gettys 是以服务来实现的。 init进程监视所有服务,并在服务失败的时候重启服务。

原有的System V init启动过程的缺点是,它基于包含了大量启动脚本的runlevel目录。而Upstart则是事件驱动型的,因此,它只包含按需启动的脚本,这将使启动过程变得更加迅速。经过良好调优并使用Upstart启动方式的Linux服务器的启动速度要明显快于原有的使用System V init的系统。
为了使Upstart更容易理解,它仍然使用了一个init进程。所以,你仍然可以看到/sbin/init,它是所有服务的根进程。
有一个好消息,那就是RHEL 6对启动过程的改变很少。你还是可以处理那些在目录/etc/init.d中的包含服务脚本的服务,所以runlevel的概念一直存在。因此,在使用yum增加一个服务后,照样可以像以前那样使用chkconfig命令激活它。此外,仍然可以用service命令来启动它。

所有先前由/etc/ inittab中处理的条目,现在都在目录/etc/init中以单个文件的形式存在(不要与目录/etc/init.d混淆,/etc/init.d中包含的是服务脚本)。下面列举几个要使用的脚本:

/etc/init/rcS.conf
通过启动大部分的基本服务来对系统进行初始化的设定
 
/etc/init/rc.conf
对启动各自的运行级别(runlevel)的设定
 
/etc/init/control-alt-delete.conf
定义当用户按“control-alt-delete”三个键时的系统行为
 
/etc/init/tty.conf
and
/etc/init/serial.conf
定义了系统处理终端登录的方式
 

除了这些通用的文件,在文件/etc/sysconfig/init中还有一些额外的配置。在这里,定义了一些参数来决定启动信息的格式。除了那些不很重要的设置,有三行我们需要注意:
AUTOSWAP=no
ACTIVE_CONSOLES=/dev/tty[1-6]
SINGLE=/sbin/sushell
其中,第一行的值你可以设定为Yes,这样可以让你的系统能够自动检测交换分区。使用此选项意味着你再也不必在/etc/fstab中挂载交换分区了。在ACTIVE_CONSOLES这一行决定了虚拟控制台的创建。在大多数情况下,tty[1-6]工作得很好,同时这个选项也允许您分配更多或者更少的虚拟控制台。但是要注意,不要使用tty [1-8],因为tty7是专门为图形界面预留的。

最后很重要的一行是single= /sbin/sushell。这一行可以有两个参数:/sbin/sushell(系统默认的参数),它会在启动单用户模式时将你带入一个root的 shell,参数/sbin/sulogin会在单用户模式启动之前弹出一个登录提示,你必须输入root账户的密码才能继续下去。

RHEL 6通过将System V替换为Upstart加快了其启动速度。采用了这项新服务,红帽仍然可以向下兼容地保持以前的管理方式,这就意味着,作为管理员,你仍可以使用原来的方式来管理服务。

2 条留言  访客:1 条  博主:1 条

  1. event: 事件, 是指系统状态的一种改变,这种改变会被通知给init进程。举例来说,boot loader会触发startup事件,系统进入runlevel 2的时候会触发runlevel 2事件,某个文件系统被挂载时会触发path-mounted事件, USB设备的插拔也都会产生相应的事件。这些时间会被通知给init进程,然后init进程来决定系统如何处理这些事件。

    文中关于upstart中的事件部分解说是错误,对于upstart支持的事件都定义在/etc/event.d/目录下,相应的事件对应相应的执行文件

    对你你所说的USB插拔对应的udev机制,和这个没有关系。同时对于文件系统挂载也不是upstart所处理的。

    upstart作为一种启动机制,不会负责那些东西

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录