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

程序管理利器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的任何版本下工作。