1. 程式人生 > >進程管理利器Supervisor--入門簡介

進程管理利器Supervisor--入門簡介

風格 崩潰 系統 then 後臺進程 精準 優先級 利用 處理器

  目錄
  
  概述
  
  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特性
  
  簡單

public static IServiceCollection AddIds4(this IServiceCollection @this)
2 {
3 @this
4 .AddAuthentication()
5 .AddQQConnect(www.dfgjpt.com"qq", "QQ Connect", SetQQConnectOptions)
6 .AddGithub("github", www.michenggw.com/"Github"www.mhylpt.com, SetGithubOptions);
7
8 @this
9 .AddIdentityServer(SetIdentityServerOptions)
10 .AddDeveloperSigningCredential(www.gcyL157.com)
11 .AddInMemoryIdentityResources(Resources.AllIdentityResources)
12 .AddInMemoryApiResources(Resources.AllApiResources)
13 .AddInMemoryClients(Clients.All)
14 .AddTestUsers(Users.All);
15
16 return @this;
  
  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的任何版本下工作。

進程管理利器Supervisor--入門簡介