快速业务通道

Upstart: Ubuntu 的基于事件的启动进程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10
gd daemon 和 gettys 就被实现为服务.init daemon 会监测每个服务的状态,如果服务出现问题会重启服务,在某些事件触发时或手工停止时会杀死服务.

/etc/event.d 目录下包含着一系列的工作定义文件(定义了 upstart init daemon 运行的工作的文件).最初,这个目录由 Upstart 包来生成.在 Feisty 之后的 Ubuntu 中,被安装的服务会向这个目录中添加控制服务的文件,替代哪些安装到 /etc/rc?.d 和 /etc/init.d 目录的文件.

Upstart init daemon 的核心是一个状态机.它持续跟踪各个工作的状态,当有事件触发的时候,跟踪工作的状态改变.当 init 跟踪到一个工作的状态从一个转变到了另一个的时候,就可能会执行工作的命令或是终止工作.

System V 的 init daemon 通过改变运行级别来启动或停止服务.而使用 Upstart init daemon 的 Ubuntu 系统没有运行级别的概念.为了将基于运行级别的系统平滑移植到基于事件的系统,并为面向其他发布版的软件提供一定的兼容性,Ubuntu 使用 Upstart 模拟了运行级别.

在 /etc/event.d/rc? 文件中定义的 rc? 工作会运行 /etc/init.d/rc 脚本,这个脚本会运行链接到 /etc/rc?.d 目录中的 /etc/init.d 中的启动脚本,以模拟 SysVinit 的行为.当系统进入一个运行级别的时候,rc? 工作就会运行这些脚本.同时,Upstart 提供了 runlevel 和 telinit 工具以提供与 SysVinit 的兼容性.

使用 initctl (init control) 工具,具有 root 权限的管理员可以和 Upstart init daemon 通信.这个工具可以用来启动、停止或报告(report)一项工作. 比如,initctl list 命令会列出所有的工作和它们的状态:

$ sudo initctl list logd (stop) waitingrc-default (stop) waitingrc0 (stop) waiting…tty5 (start) running, process 4720tty6 (start) running, process 4727

要获得更详细的信息,可以参考 initctl 的 man page 或本节的例子.使用 initctl help 命令 (help 前没有横杠)可以列出 initctl 的命令列表.此外,也可以用 initctl list –help 来列出 list 命令的帮助信息,当然,将 list 换乘其它的 initctl 命令会得到该命令对应的信息.start, stop 和 status 工具是 initctl 的链接,会直接运行 initctl 的对应命令.

工作(Job)

/etc/event.d 目录下的每个文件都定义了一个工作,其中至少应该包含一个事件和一个命令.当事件被触发的时候,init 执行对应的命令.本节将介绍管理员自定义的工作和 Upstart 包中包含的工作.

下面的管理员自定义的工作使用 exec 关键字执行了一条 shell 命令.实际上,也可以用这个关键字执行一个 shell 脚本或一个二进制可执行文件.

$ cat /etc/event.d/mudat start on runlevel 2exec echo “Entering multiuser mode on ” $(date) > /tmp/mudat.out

这个文件定义了一个任务:当系统进入到多用户模式(运行级2)的时候执行 echo 命令.这个命令会向 /tmp/mudat.out 文件写出一条包含日期时间消息.shell 会运行 date 命令替换其中的内容.在任务结束后, mudat 任务会停止并进入等待状态.

在下一个的例子中,cat 命令展示了 /tmp/mudat.out 文件的内容和 initctl list 命令关于这个任务的输出(status 工具也可以得到同样的信息):

$ cat /tmp/mudat.out Entering multiuser mode on Tue Jul 10 17:34:39 PDT 2007 $ sudo initctl list mudatmudat (stop) waiting

如果 exec 命令行中包含 shell 的特殊字符, init 会运行 /bin/sh(dash 的符号链接)并把命令行交给它来处理.否则,exec 会直接运行命令行.如果要执行多个 shell 命令,可以把他们放到脚本文件中并运行脚本,或是使用 script….end script (下面会介绍).

Upst

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号