快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10
art initdaemon 只能监测哪些使用 exec 运行的工作(服务),无法监测使用 script…end script 运行的工作.换句话说,服务应该使用 exec 运行,而任务则可以使用任意的方法.

myjob 示例

用户也可以自己定义一个事件,并让一个工作被这个事件触发.如下的 myjob 工作定义文件定义了一个被 hithere 事件触发的工作:

$ cat /etc/event.d/myjob start on hitherescript echo “Hi there, here I am!” > /tmp/myjob.out date >> /tmp/myjob.out end script

myjob 文件提供了另一种运行命令的方法:在 script 和 end script 关键字之间包含了两行命令.这两个关键字常常导致 init 去运行 /bin/sh.例中的命令将一条消息和日期输出到了 /tmp/myjob.out 文件.现在可以使用 initctl emit 命令触发这个工作.如下,init 展示了 myjobs 在我们的触发下所经历的各个状态:

$ sudo initctl emit hitherehitheremyjob (start) waitingmyjob (start) startingmyjob (start) pre-startmyjob (start) spawned, process 6064myjob (start) post-start, (main) process 6064myjob (start) running, process 6064myjob (stop) runningmyjob (stop) stoppingmyjob (stop) killedmyjob (stop) post-stopmyjob (stop) waiting $ cat /tmp/myjob.out Hi there, here I am!Sat Jul 7 20:19:13 PDT 2007 $ sudo initctl list myjob myjob (stop) waiting

在上面的例子里,cat 展示了 myjob 产生的输出,initctl 展示了工作的状态.同样也可以用 initctl start myjob(或直接用 start myjob)来运行它.initctl start 十个非常有用的命令,这样你就可以在没有事件的情况下启动一个工作.比如,你可以用 initctl start mudat 来直接运行前面例子中的 mudat 工作而不会触发 runlevel 2 事件.

指定带参数的事件

telinit 和 shutdown 工具发送带有参数的 runlevel 事件.比如,shutdown 发送 runlevel 0,telinit 2 会发送 runlevel 2 事件.你可以在工作定义中用如下格式匹配这些事件:

start | stop on event [arg]

其中 event 是一个事件,而 arg 是一个可选参数.要在系统进入 runlevel 2 的时候停止一个工作,可以指定 stop on runlevle 2,也可以指定 runlevel [235] 来匹配运行级 2, 3 和 5,或用 runlevel [!2] 来匹配 2 之外的运行级.

尽管 Upstart 会忽略掉多余的事件参数,但工作定义文件中的事件名称里的参数在事件中存在.比如,没有参数的 runlevel 可以匹配所有的 runlevel 事件,不论是否有参数,但 runlevel S arg2 将不会匹配任何事件, runlevel 事件只会带有一个参数.

/etc/event.d 中的工作定义文件

随着 Ubuntu 从 SysVinit 向 Upstart 的迁移,更多地工作会在 /etc/event.d 文件中定义.本节介绍一些 Upstart 包放在这个目录中的工作定义文件.

/etc/event.d/rc2 工作定义文件定义了 rc2 任务,这和其他的 rc? 任务没什么区别.rc2 任务在系统进入到多用户模式的时候会被触发(事件名称是 runlevel 2);当系统进入到其它任意运行级的时候(runlevel [!2])会结束.脚本的第一个部分调用 runlevel 工具,它会让系统显示自己在运行级2 (当然,实际上已经没有运行级这个玩意儿了)并给两个变量赋值.接下来的工作由 exec 命令完成,它会使用参数 2 运行 /etc/init.d/rc 脚本.这个脚本使用相应的参数调用 /etc/rc?.d 目录中的那些链接.这里 rc2 任务会运行 /etc/rc2.d 下的符号链接对应的 init 脚本.

$ cat /etc/event.d/rc2 # rc2 - runlevel 2 compatibility## This task runs the old sysv-rc runlevel 2 (”multi-user”) scripts. It# is usually started by the telinit compatibili

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