使用 supervise (daemontool) 自動重啟行程

不同於 Ubuntu 使用 upstart 作為 initialization 程式,Debain 仍舊使用傳統的 System V 風格的 init (至少目前的 Debian 7.7 Wheezy 仍是如此)。於此環境之下,若我們希望當一個行程(process)被終止之後,可以自動地重新啟動,該如何辦到?

Daemontool

daemontool 是一個工具包,包含了數個 daemon 工具(廢話):
supervise
svc (supervise control)
svscan (supervise scan)
svscanboot (supervise scan boot)
svstat (supervise status)
…etc

最主要的工具是 supervise,它會啟動特定行程並對其做監視,當該行程結束或終止時,supervise 會在自動啟動該行程。根據該作者 D. J. Bernstein 的敘述, daemontool 有以下特點與優勢:

inittab ttys init.d rc.local /service
Easy service installation and removal No No Yes No Yes
Easy first-time service startup No No No No Yes
Reliable restarts Yes Yes No No Yes
Easy, reliable signalling No No No No Yes
Clean process state Yes Yes No No Yes
Portability No No No No Yes

 

啟動 supervise

所有需要被 supervise 監控的行程都須放在跟目錄下的 /service 目錄,假設一個要被 supervise 監看的行程為 process1,那麼就建立一個 /service/process1 之目錄,並且在 /service/process1/ 之下把放名為 run 的執行檔或是 script。接著執行

# supervise /service/process1

即可。或是當有 /service 下有很多個行程需要同時啟動時,則可以直接執行

# svcan

一次啟動所有 /service 下的所有行程。此外,執行中的行程,則可以使用 scv 傳遞信號(signal) 或是 svstat 檢查狀態等。

 

小結

daemontool 固然好用但已經許久未更新,另一個相同功能的選擇是 runit,或許之後也可以來研究一番。

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *


6 + = 十五

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>