網頁

搜尋此網誌

2016年3月27日 星期日

Upstart

Upstart 是一種 init 服務 (daemon),init 是 Linux 上第一個執行的行程 (process)。init 系統除了 Upstart 之外,還有過去的 System V init (唸作 System Five, 縮寫為 SysV),與後來發展的 systemd 。Upstart 是 Ubuntu 為了取代 SysV init 所開發出來的系統,採用事件為基礎的設計 (event-based),利用事件驅動的方式可以平行執行多個程式,提高開機的速度與效能。

Upstart 有兩個重要的概念:「事件 (Events) 」與「工作 (Jobs)」

Job

Job 是一個工作的單位 (unit of work),Upstart 有三種 Job 類型:
  • Task Job:程式執行一段時間就會結束, Process 有確定壽命和結束狀態,簡稱「Task」。
  • Service Job:長時間執行的程式,通常是背景服務,簡稱「Service」。
  • Abstract Job:不會有子行程產生,純粹僅有工作狀態。
每個 Job 會存在於不同的狀態,共有 11 種狀態 (State):
  • 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 在 Upstart 系統上是定義在副檔名為 .conf 的組態檔 (Job Configuration File) 裡,檔名應該要能夠表示你所執行的應用服務。至於 Job 要如何撰寫,可以參考 Upstart 文件的第6章

依據組態檔放置的位置不同,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 溝通與互動,有下列幾個程式可使用,詳細指令請參考連結的內容:

參考資料:

###

沒有留言:

張貼留言

熱門文章