ubuntu upstart 的基本概念

来源:互联网 发布:c语言国际象棋棋盘 编辑:程序博客网 时间:2024/05/29 15:13

相信不少ubuntu的新手玩家都尝试过设置runlever进入字符模式但没有成功。当初年少无知,找不到解决问题的头绪,也没有解决问题的动力

今天重新审视这个问题,有了新知

首先,runlevel之类的东西是提供给init进程使用,包括init.d以及类似的有着一堆诡异名字的脚本,用于linux加载完成后启动服务

那么,问题就应该从init程序开始


问题来了,init已经不在是我们熟悉的那个init了,upstart是个什么鬼?


事实上,sysv 的 init程序由于其过于古旧,越来越无法适应多核以及面向一般用户的linux发行版,因此遭到废弃。Canonical公司的一名程序员写了init的升级版,upstart,理所自然地应用到了ubuntu上。

从man中,我们可以看到,upstart不在使用那一堆诡异的目录,而是清爽简介的/etc/init

那么该目录又有什么?

可以看到,该目录下是一堆以.conf格式命名的文件。这些文件可以看成init使用的bash脚本的升级版,具体的内容不去深究,即使不清楚具体语法的看下description基本都明白该脚本做了些什么。不得不说这是一个巨大的进步。

问题来了,既然init不在使用,但是很显然各种带d的daemon程序依然是由bash脚本启动的,那么这意味这upstart应该是对init兼容的。事实上,该目录下的rc.conf rcS.conf rc-sysinit.conf就是用来兼容init的,包括对runlevel的处理,以及启动脚本。

重官方提供的cookbook上可以看到,upstart相比init最大的进步在于从原始的按顺序执行脚本(主要是因为某些服务的运行需要其它服务的支持,因此脚本的运行必须是按照一定顺序的),变成了基于条件的、异步的、可并行的执行方式。即若满足了某些条件(比如热插拔硬件、某些脚本执行完毕等),则执行可以执行的脚本。通过这种方式,使得脚本的执行顺序控制变得简单(之前的控制顺序是由脚本名字决定的,意味值如果某个脚本发生了改变,会导致一系列脚本的改变);同时支持多核带来的性能提升;更重要的是可以支持硬件的热插拔。

但是upstart并不一定是未来init的代名词。systemd也是init的另一种解决方案,但是这个项目非常的激进,有别于linux的传统方式,使用了非常mac os风格的管理方式,招致批评的同时却提供了更好的用户体验。据说Ubuntu在不久的将来会抛弃自己的upstart选择systemd,但这又是另一个故事了。

0 0
原创粉丝点击