Upstart 有兩個重要的概念:「事件 (Events) 」與「工作 (Jobs)」
Job
Job 是一個工作的單位 (unit of work),Upstart 有三種 Job 類型:- Task Job:程式執行一段時間就會結束, Process 有確定壽命和結束狀態,簡稱「Task」。
- Service Job:長時間執行的程式,通常是背景服務,簡稱「Service」。
- Abstract Job:不會有子行程產生,純粹僅有工作狀態。
- waiting:初始狀態
- starting:工作即將開始
- security:工作正在載入 AppArmor 安全政策
- pre-start:執行 pre-start 當中
- spawned:即將執行 script 或 exec
- post-start:執行 post-start 當中
- running:在 post-start 之後,表示 Job 正在執行的過渡期間狀態
- pre-stop:執行 pre-stop 當中
- stopping:在 pre-stop 之後的過渡期間狀態
- killed:工作即將停止
- post-stop:執行 post-stop 當中
依據組態檔放置的位置不同,Job 可以區分為:
- System Job:組態檔位於 /etc/init/ 目錄中。
- User Job:組態檔位於使用者加目錄下的 .init/ 目錄中,Upstart v1.7以後已經不支援。
- Session Job:Upstart v1.7之後才有的功能,Job 是被使用者的 Session 所啟動,組態檔有多個位置,請參考 cookbook 說明。
Event
Event 在 Upstart 裡是用來通知其他 Job 或 Event,Event 被發出 (emit) 後會廣播至整個 Upstart 系統,只有感興趣 (也就是有註冊對應的 Event) 的 Job 或 Event 才會收到。注意到, Event 的名稱允許和 Job 的名稱是相同的。另外, Event 也可能和 Job State 的名稱相同,但是相同名稱的 Event 和 Job State 不是指同一個事情,雖然運作起來很相似 (變動狀態很像發出事件)。
Upstart 有三種 Event 類型:
- Signal Event:信號事件是非阻塞 (non-blocking)、非同步 (asynchronous) 的事件,信號事件發出後會立即回傳,允許呼叫者繼續執行其他工作。
- Method Event:方法事件是阻塞 (blocking)、同步 (synchronous) 的事件,方法事件如同程式設計的 function 功能,呼叫者發出後必須等待方法事件執行完畢,若有問題發生將回傳錯誤資訊。
- Hook Event:掛勾事件與方法事件類似,是阻塞、同步的事件類型,只是用途不太相同,當作旗標 (flag) 的功能通知其他 Job 或 Event,確定所有接收者都執行完畢才繼續。
操作
在 Ubuntu 上和 Upstart 溝通與互動,有下列幾個程式可使用,詳細指令請參考連結的內容:- init - Upstart process management daemon
http://manpages.ubuntu.com/manpages/trusty/en/man8/init.8.html - initctl - init daemon control tool
http://manpages.ubuntu.com/manpages/trusty/en/man8/initctl.8.html - runlevel - output previous and current runlevel
http://manpages.ubuntu.com/manpages/trusty/en/man8/runlevel.8.html - telinit - change system runlevel
http://manpages.ubuntu.com/manpages/trusty/en/man8/telinit.8.html
參考資料:
- Chapter 3. The system initialization
https://www.debian.org/doc/manuals/debian-reference/ch03.en.html - Debate/initsystem - Debian Wiki
https://wiki.debian.org/Debate/initsystem/ - Upstart Intro, Cookbook and Best Practises
http://upstart.ubuntu.com/cookbook/ - Ubuntu Manpage: upstart-events - Well-known Upstart events summary
http://manpages.ubuntu.com/manpages/trusty/en/man7/upstart-events.7.html - Ubuntu Manpage: runlevel - event signalling change of system runlevel
http://manpages.ubuntu.com/manpages/trusty/en/man7/runlevel.7.html
###