当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [翻译]系统启动管理软件包upstart(init)的配置和使用
帖子发表于 : 2007-08-22 1:30 

注册: 2007-06-13 19:47
帖子: 43
送出感谢: 0 次
接收感谢: 0 次
  

  upstart从Ubuntu 6.10开始被引入Ubuntu,它是/sbin/init守护进程(daemon)的代替品,是基于事件的(event-based)。它在启动期间负责处理任务和服务的启动,系统关闭时关闭它们,并在系统运行时管理它们。我发现upstart的中文使用指南很少,就翻译了部分http://upstart.ubuntu.com/getting-started.html,希望对大家有些帮助。

1.编写工作(job)文件(工作文件用来指示upstart什么时候该做什么事)

  一旦你启动和运行upstart,你会想要编写自己的工作文件。请记住工作文件的格式还未稳定,所以如果你更新了upstart,你可能要修改现有的文件。

  /etc/event.d中的文件里定义了一些工作,每个工作的名字就是这个目录里的文件名。这些文件都是普通的文本文件,而且不是可执行的。

  工作文件的格式把一个或多个的空格或跳格(tab)当作是空白,这些空白会被跳过,除非这些空白在单引号或双引号中。在引号中允许有换行,不过要在换行前加上反斜杠。注释行由#号起头,直到本行行尾。

①exec和script
  所有的工作文件都必须要含有exec节(exec stanza)或者script节(script stanza)。它们指定这个工作运行什么文件。

  你可以向exec传送可执行文件的路径和可选的参数。任何特殊字母(比如引号或美元符号'$')将被传送到shell来进行解释。
代码:
exec /bin/foo --opt -xyz foo bar


  script则把脚本代码传送给/bin/sh执行。shell的-e选项将被使用,所以任何一个命令执行失败都将终止运行脚本。script节的最后一行为"end script"。
代码:
script
   # do some stuff
   if [ ... ]; then
   ...
   fi
end script


②启动前运行的脚本和结束后运行的脚本pre-start script and post-stop script

  在运行exec或者script指定的程序之前或者之后,你可以运行一些附加的shell代码。附加代码不是用来启动主进程的,实际上他们也不能启动主进程。附加代码是用来准备运行环境和进行清理工作的。

  启动前运行的脚本指定主进程运行前所要执行的shell代码,跟script一样,所以任何一个命令执行失败都将终止运行脚本。它也以"end script"作为结束。
代码:
pre-start script
    # prepare environment
    mkdir -p /var/run/foo
end script


  结束后运行的脚本指定主进程终止或者被杀死后运行的shell代码。任何一个命令执行失败都将终止运行脚本。它也以"end script"作为结束。
代码:
post-stop script
    # clean up
    rm -rf /var/run/foo
end script


③start on和stop on
  你的工作现在可以由系统管理员手动的启动和停止,然而,你也想要在事件发生时自动启动和停止一些工作。

  upstart发出(emit)的主要事件是startup。这个事件在机器第一次启动(没有可写的文件系统或网络)时发出。如果你使用upstart的工作文件范例,你还会有运行级X事件,X是0到6或者S。工作将与指定运行级的init脚本一起运行。

  其他工作可以在它们运行时生成事件。当另一个工作停止后你可以用"stopped 工作名"运行自己的工作。(you can have yours run when another job stops by using stopped job.)另一个有用的工作事件是"started 工作名"。(The other useful job event is started job.)(译者注:这段话的意思是说,一个工作的启动和停止也是事件。)

  你可以用start on列出一些事件,表明发出这些事件时你想要启动这个工作,也可以用stop on来指明发出某些事件时你想要停止这个工作。
代码:
start on startup

start on runlevel 2
start on runlevel 3

start on stopped rcS

start on started tty1

(译者注:不知道是不是水平有限,上面的东西翻译得乱七八糟。其实说白了很简单的,假如一个工作文件包含了上面这段代码,那么这个工作会在"startup","runlevel 2","runlevel 3","tty1启动","rcS停止"这些事件发生时运行。)

④控制台(console)
  通过使用console节,你可以改变设置指定工作将信息输出到哪里,从哪里获得输入。console节你可以指定下列参数之一:output(从/dev/console获得输入输出);owner(输出和Control-C发送给主进程) ;none(默认参数,输入输出指定到/dev/null)。
代码:
exec echo example
console output


2.工作控制(在终端中对工作进行控制)
①start和stop命令
  在终端中运行start和stop命令,可以手动启动和停止工作,这两个命令通常被安装到/sbin。他们的参数是工作名,输出状态的改变
代码:
# start tty1
tty1 (start) running, process 7490 active

# stop tty1
tty1 (stop) running, process 7490 killed


②status命令

  可以用status命令查询任意工作的状态。status也被安装在/sbin。它使用工作名作为命令行参数,输出每个工作的状态。
代码:
# status tty1
tty1 (stop) waiting

# start tty1
tty1 (start) running, process 4418

# status tty1
tty1 (start) running, process 4418


  输出由以下部分组成:工作名 (最后被启动还是被停止) 当前状态, 进程id。

③initctl list命令
  所有工作的列表和它们的状态可以用initctl list命令获得。
代码:
# initctl list
control-alt-delete (stop) waiting
logd (start) running, process 2347
rc-default (stop) waiting
rc0 (stop) waiting
rc0-halt (stop) waiting
rc0-poweroff (stop) waiting
rc1 (stop) waiting
rc2 (stop) waiting
rc3 (stop) waiting
rc4 (stop) waiting
rc5 (stop) waiting
rc6 (stop) waiting
rcS (stop) waiting
rcS-sulogin (stop) waiting
sulogin (stop) waiting
tty1 (start) running, process 4418
tty2 (start) running, process 7367
tty3 (start) running, process 7368
tty4 (start) running, process 7369
tty5 (start) running, process 7370
tty6 (start) running, process 7371


④initctl emit命令
  自定义事件可以由initctl emit命令发出。所有由这个事件启动或停止的工作都会被影响到,假设有下面这个工作:
代码:
on bounce
exec echo --Bounced--
console output


下面这个命令会执行这个工作:
代码:
# initctl emit bounce
--Bounced--


  事件可以带有参数(在emit命令中传递)和环境变量(使用-e选项)


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-08-22 1:36 

注册: 2007-06-13 19:47
帖子: 43
送出感谢: 0 次
接收感谢: 0 次
其实我原来主要是为了把那6个tty关掉5个节省一些内存(虽然只省出5兆多,但是主要考虑自己心里舒服:P) ,就上了这个网址去看怎么做http://upstart.ubuntu.com/getting-started.html ,最后觉得翻译一下比较简单,就贴上来了。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [翻译]系统启动管理软件包upstart(init)的配置和使用
帖子发表于 : 2008-11-29 0:06 

注册: 2008-10-21 9:37
帖子: 8
送出感谢: 0 次
接收感谢: 0 次
:em11 好铁,正在一筹莫展呢,非常3Q


页首
 用户资料  
 
4 楼 
 文章标题 : Re: [翻译]系统启动管理软件包upstart(init)的配置和使用
帖子发表于 : 2009-04-26 12:16 

注册: 2008-06-08 10:04
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
顶一个 :em05


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [翻译]系统启动管理软件包upstart(init)的配置和使用
帖子发表于 : 2009-12-16 17:29 

注册: 2008-03-22 8:00
帖子: 50
送出感谢: 0 次
接收感谢: 0 次
感谢了,正需要!
找了半天都不知道那些启动时执行的任务在什么地方,参考LZ,
在9.10下,/etc/init目录执行 ls | wc -l ,结果是38,再执行 initctl list | wc -l ,结果是39,哈哈,看来就在这个目录下了。tty2~6.conf内容差不多,所以把tty2.conf备份后就把多余的5个给删了,重启,生效。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译