ubuntu upstart 的基本概念

相信不少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,但這又是另一個故事了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章