程序管理利器Supervisor--入門簡介
目錄
- 概述
- Supervisor是什麼
- Supervisor意圖
- Supervisor特性
- Supervisor元件
- 平臺需求
概述
專案執行需要後臺執行,一般都是使用 nohup,但是nohup不能對後臺程序監控和失敗重啟等高階功能,有木有更好的工具可以幫我們做這些事呢,通過谷哥的綁住找到了一個滿意答案就是Supervisor
轉帖請註明出處:https://my.oschina.net/u/2342969/blog/2963930
Supervisor是什麼
Supervisor是一個程序管理系統(其實是一個軟體),它有一個視覺化介面可以啟動程序,檢視程序狀態,它允許使用者監視和控制類unix作業系統上的許多程序。
它與launchd、daemontools和runit等程式共享一些相同的目標。與某些程式不同,它不打算作為init的替代程式“process id 1”執行。相反,它被用於控制與專案或客戶相關的過程,並且在引導時像其他程式一樣啟動。
Supervisor意圖
- 簡便
rc.d指令碼是流程初始化/自動啟動/管理的一種很好的、最基本的形式,但是編寫和維護它們可能會很麻煩。此外,rc.d指令碼不能自動重啟崩潰的程序,許多程式在崩潰時不能正確重啟自己。Supervisor將程序作為子程序啟動,並且可以配置為在崩潰時自動重啟它們。它還可以自動配置為在自己的呼叫上啟動程序。
- 精準
通常很難在UNIX上準確地獲得程序的執行/停止狀態。Pidfiles表現是不準確的。Supervisor以子程序的形式啟動程序,因此它總是知道其子程序的真正執行/停止狀態,並且可以方便地檢視這些資料。
- 託管
我們不希望或不需要完整的shell訪問程序執行的機器。在底層TCP埠上偵聽的程序通常需要作為根使用者啟動和重新啟動(UNIX的一個錯誤特性)。通常情況下,允許普通使用者停止或重啟這樣的程序是完全可以的,但是為他們提供shell訪問通常是不切實際的,而為他們提供根訪問或sudo訪問通常是不可能的。向他們解釋為什麼會存在這個問題也是困難的。如果將Supervisor作為根使用者啟動,就有可能允許普通使用者控制此類流程,而不需要向他們解釋問題的複雜性。通過從一個簡單的shell或web UI發出“stop”、“start”和“restart”命令,Supervisorctl允許對機器進行非常有限的訪問,基本上允許使用者檢視程序狀態並控制受監視控制的子程序。
- 程序組
Supervisor通過程序組管理程序,程序常常需要在組中啟動和停止,甚至可以按“優先順序”啟動和停止。Supervisor允許您為程序分配優先順序,並允許使用者通過監控管理客戶端發出“start all”和“restart all”等命令,這些命令按照預先分配的優先順序順序啟動程序。此外,可以將流程分組為“流程組”,並且可以作為一個單元停止和啟動一組邏輯相關的流程。
Supervisor特性
- 簡單
Supervisor是通過一個簡單的ini風格的配置檔案來配置的,很容易學習。它提供了許多程序選項,使您的工作更容易,例如重新啟動失敗的程序和自動日誌迴圈。
- 一站式
Supervisor提供了一個開始、停止和監視流程的控制檯。程序可以單獨控制,也可以分組控制。可以通過配置Supervisor提供本地或遠端命令列和web介面。
- 高效
Supervisor通過fork/exec啟動它的子程序,而不是守護。當程序終止時,作業系統立即向Supervisor發出訊號,這與某些解決方案不同,這些解決方案依賴於容易出錯的的PID檔案和定期輪詢來重啟失敗的程序。
- 可擴充套件
Supervisor有一個簡單的事件通知協議,用任何語言編寫的程式都可以使用它來監視它,還有一個XML-RPC介面用於控制。它也可以由Python開發人員利用擴充套件點構建。
- 相容性
Supervisor除了windows系統,其他系統均可以使用。它在Linux、Mac OS X、Solaris和FreeBSD上均得到了測試和支援。它完全用Python編寫,所以安裝不需要C編譯器。
- 可靠
雖然Supervisor在今天被非常積極的開發,但是它並不是一個新的軟體。Supervisor已經存在多年,並且已經在許多伺服器上使用。
Supervisor元件
supervisord
Supervisor服務部分叫做Supervisord。它負責自己呼叫時啟動子程式,響應來自客戶機的命令,重新啟動崩潰或退出的子程序,記錄子程序掛掉和崩潰的輸出,並生成和處理與子程序生命週期中的點對應的“事件”。
它使用了一個配置檔案。配置檔案通常位於/etc/supervision.conf中。這個配置檔案是一個“Windows-INI”風格的配置檔案。通過適當的檔案系統許可權保持該檔案的安全性非常重要,因為它可能包含未加密的使用者名稱和密碼。
通俗點講就是Supervisor的處理器
supervisorctl
supervisorctl是Supervisor命令列客戶端.它提供了一個類shell的介面,用於管理Supervisor提供的特性.使用者可以連線到不同的監控器程序(一次一個),獲取受控子程序的狀態,停止和啟動的子程序,以及監控器的執行程序列表。
通俗點講就是Supervisor的命令工具
Web Server
如果配置中啟動了這個模組,就可以通過瀏覽器訪問具有與supervisorctl類似功能的web使用者介面。在配置檔案的[inet_http_server]部分開啟,訪問伺服器URL(例如http://localhost:9001/),通過web介面檢視和控制程序狀態。
通俗點講就是一個視覺化介面,可以在介面操作程序
XML-RPC Interface
web UI基於XML-RPC介面服務,該介面可用於詢問和控制Supervisor及其執行的程式
平臺需求
Supervisor經過測試,可以在Linux (Ubuntu 9.10)、Mac OS X(10.4/10.5/10.6)、Solaris (10 for Intel)和FreeBSD 6.1上執行。它在大多數UNIX系統上都可以很好地工作。但是他不能在windows平臺下執行
Supervisor可以使用Python 2.4或更高版本,但不能在Python 3的任何版本下工作。