項目運行須要後臺運行,通常都是使用 nohup,可是nohup不能對後臺進程監控和失敗重啓等高級功能,有木有更好的工具能夠幫咱們作這些事呢,經過谷哥的綁住找到了一個滿意答案就是Supervisorweb
轉帖請註明出處:https://my.oschina.net/u/2342969/blog/2963930shell
Supervisor是一個進程管理系統(實際上是一個軟件),它有一個可視化界面能夠啓動進程,查看進程狀態,它容許用戶監視和控制類unix操做系統上的許多進程。windows
它與launchd、daemontools和runit等程序共享一些相同的目標。與某些程序不一樣,它不打算做爲init的替代程序「process id 1」運行。相反,它被用於控制與項目或客戶相關的過程,而且在引導時像其餘程序同樣啓動。瀏覽器
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是經過一個簡單的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。它負責本身調用時啓動子程序,響應來自客戶機的命令,從新啓動崩潰或退出的子進程,記錄子進程掛掉和崩潰的輸出,並生成和處理與子進程生命週期中的點對應的「事件」。
它使用了一個配置文件。配置文件一般位於/etc/supervision.conf中。這個配置文件是一個「Windows-INI」風格的配置文件。經過適當的文件系統權限保持該文件的安全性很是重要,由於它可能包含未加密的用戶名和密碼。
通俗點講就是Supervisor的處理器
supervisorctl是Supervisor命令行客戶端.它提供了一個類shell的接口,用於管理Supervisor提供的特性.用戶能夠鏈接到不一樣的監控器進程(一次一個),獲取受控子進程的狀態,中止和啓動的子進程,以及監控器的運行進程列表。
通俗點講就是Supervisor的命令工具
若是配置中啓動了這個模塊,就能夠經過瀏覽器訪問具備與supervisorctl相似功能的web用戶界面。在配置文件的[inet_http_server]部分開啓,訪問服務器URL(例如http://localhost:9001/),經過web接口查看和控制進程狀態。
通俗點講就是一個可視化界面,能夠在界面操做進程
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的任何版本下工做。