Upstart管理Ubuntu自啓動服務(10.04以後適用)

轉載:http://shao-fan.com/blog/ubuntu-upstart.html


從Ubuntu 10.04開始,Upstart就被引入管理系統啓動的進程與服務。所以,如果要添加或禁止某些服務進程自動啓動,以前的方式(比如用update-rc.d命令)就不管用了。如果你運行這個命令來停止mysql,你會得到如下信息:

$>sudo /etc/init.d/mysql stop
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart
 
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart mysql

那麼Upstart又怎麼用呢?

首先,我們知道舊的系統管理被稱作SysV,它通過在代表各個run level的目錄裏建立腳本來控制服務的自動啓動。比如,/etc/rc0.d目錄裏以S開頭的腳本會被運行在runlevel 0。在這種方式下,如果要屏蔽一個服務,需要把S開頭的那個更名爲以K開頭。而所以在rc*.d下的腳本都鏈接到/etc/init.d目錄裏。而Upstart採用了完全不同的方式。它要求所有的啓動腳本,其實是配置文件,建立在/etc/init目錄下,每個服務一個文件,裏面定義腳本啓動與關閉的運行級別、條件、事件,等。可以看得出,Upstart要比SysV高明得多,因爲SysV啓動是線性、順序的,一個S20的服務必須要等待S19啓動完成才能啓動,如果一個啓動要花很多時間,那麼後面的服務就算完全無關,也必須要等。而在Upstart下,服務的啓動基於事件,而且是並行的,只要事件發生,服務可以併發啓動。這種方式無疑要優越得多,因爲它可以充分利用現在計算機多核的特點,大大減少啓動所需的時間。

下面介紹一下它的配置文件,以及如何管理服務/自動進程的啓動、停止。

進入/etc/init目錄,就可以看到所有的配置文件。打開其中一個,它的結構大概都類似這樣:

# name - description
#
# more details of the service
#
 
description     "description of the service"
 
start on (local-filesystems
	  and net-device-up
	  and runlevel [45]
stop on runlevel [06]
 
expect daemon
task
 
emits event-1
emits event-2
...
 
pre-start script
	...
 
exec /usr/sbin/...
 
post-start script
	...

內容非常容易理解。start on和stop on定義了啓動與停止的事件、運行級別等。emits是這個服務自己觸發的事件,也就是這個服務啓動後發出的事件。下面的pre-start script和post-start script是啓動前後運行的腳本。是不是很簡單?

那麼怎樣取消一個服務的自動啓動?拿MySQL爲例,只需要把start on那三行註釋掉就好了。但不要刪除/etc/init/mysql.conf文件,這樣以後仍然可以用start/stop這些命令來控制它的狀態。

輸入命令start, stop, restart, status,即可啓動、停止、查詢服務狀態,對應以前init.d的方式。另一個很有用的命令是initctl,在命令行輸入initctl list即可列出所有服務的運行狀態。用man initctl可以獲取更多的信息。

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