進程管理工具Supervisor(一)簡介與使用

来源:http://www.cnblogs.com/linxiyue/archive/2017/12/22/8086756.html
-Advertisement-
Play Games

Supervisor是用Python開發的一套client/server架構的進程管理程式,能做到開機啟動,以daemon進程的方式運行程式,並可以監控進程狀態等等。 linux進程管理方式有傳統的rc.d、新興的upstart、systemd等,與這些相比,Supervisor有著自己的特點。 便 ...


Supervisor是用Python開發的一套client/server架構的進程管理程式,能做到開機啟動,以daemon進程的方式運行程式,並可以監控進程狀態等等。

linux進程管理方式有傳統的rc.d、新興的upstart、systemd等,與這些相比,Supervisor有著自己的特點。

便利性

使用rc.d管理進程的時候,一是要寫耗時耗力的腳本,二是管理的進程掛掉的話不會自動重啟。

而supervisor要啟動子進程,只需要將子進程的啟動命令寫入配置文件即可,配置自動重啟子進程也很方便。

精確

supervisor作為父進程監控子進程,得到的子進程狀態是很準確的。

授權

一般要管理linux進程的話,特別是在一些“low" tcp埠,比如1024以下埠中運行的程式,都需要root許可權。

而以root許可權啟動supervisord後,一般的用戶可以在一個簡單的shell或者web界面中獲取supervisord控制的子進程運行狀態,並通過stop、start、restart的命令控制子進程的運行。

進程組

supervisor可以對子進程以start all或者restart all命令的方式進行統一管理。

中央集中式管理

supervisor可以在同一個地方啟動、停止或者監視管理的進程。既可以單獨的控制一個進程,也可以一起控制一組進程。

管理的時候,既可以本地管理,又可以遠程連接,提供命令行介面與web頁面介面。

高效性

supervisor是通過fork/exec的方式啟動子進程的,子進程掛掉的話,操作系統會立即通知supervisor。

相容性

除了windows,其他操作系統平臺都可運行supervisor。supervisor使用python編寫,不需要c編譯器。

組件

 supervisord

supervisor的伺服器端,負責啟動子程式,響應客戶端發來的命令,重啟子程式,記錄子程式stdout和stderr的日誌,處理Event。

配置文件一般是名為/etc/supervisord.conf的ini文件。

 supervisorctl

supervisor的命令行客戶端,提供一個類shell介面,用戶可以使用supervisorctl連接不同的supervisord進程,查看子進程狀態,start、stop子進程,獲取控制的子進程列表。

客戶端可以使用unix socket或者tcp socket與服務端進行通訊,通過配置文件中的[supervisorctl]段進行配置。

Web Server

使用tcp socket啟動supervisord的時候,提供的一個訪問supervisor的web介面。

url地址通過配置文件中的[inet_http_server]進行設置。

XML-RPC Interface

一個XML-RPC介面

下載

可以使用setuptools或者pip下載:

easy_install supervisor
or
pip install supervisor

ubuntu中使用apt下載:

apt-get install supervisor

配置文件

運行echo_supervisord_conf命令可以在shell中顯示一份supervisor配置文件樣本。配置一般是放在文件/etc/supervisord.conf的,所以可以將配置輸入到配置文件中:

echo_supervisord_conf > /etc/supervisord.conf

上述命令需要root許可權,如果沒有許可權或者想另置配置文件地址,可以在當前目錄生成:

echo_supervisord_conf > supervisord.conf

然後啟動時使用-c選項指定配置文件即可:

supervisord -c supervisord.conf

啟動

首先配置要啟動的子進程,可以在supervisord.conf中配置,也可以單獨配置,supervisord.conf中的include配置:

[include]
files = /etc/supervisor/conf.d/*.conf

所以可以在/etc/supervisor/conf.d/目錄下,以.conf作為擴展名為子進程建立單獨的配置文件,比如建立一個foo.conf文件:

[program:foo]
command=/bin/cat

上述是最簡單的配置了,foo為子進程名稱,command是子進程運行命令。

重啟supervisor使配置生效:

service supervisor restart

或者直接執行啟動supervisord:

$BINDIR/supervisord

啟動foo子進程:

 supervisorctl start foo

一個實際例子,啟動celery beat服務,建立celerybeat.conf文件:

; ================================
;  celery beat supervisor example
; ================================

[program:celerybeat]
; Set full path to celery program if using virtualenv
command=celery beat -A myapp --schedule /var/lib/celery/beat.db --loglevel=INFO

; remove the -A myapp argument if you aren't using an app instance

directory=/path/to/project
user=nobody
numprocs=1
stdout_logfile=/var/log/celery/beat.log
stderr_logfile=/var/log/celery/beat.log
autostart=true
autorestart=true
startsecs=10

; Causes supervisor to send the termination signal (SIGTERM) to the whole process group.
stopasgroup=true

; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=999

啟動:

$ supervisorctl start celerybeat
celerybeat: started

celery beat服務開始運行了:

[2017-12-22 07:13:47,904: WARNING/ForkPoolWorker-1] 32
[2017-12-22 07:13:47,908: INFO/ForkPoolWorker-1] Task tests.tasks.add[77706e41-83c1-4545-922b-b77a57205ef5] succeeded in 0.00359446300718s: None
[2017-12-22 07:13:57,903: INFO/MainProcess] Received task: tests.tasks.add[3f9c7c88-61aa-44cc-a517-14f32305ad64]  
[2017-12-22 07:13:57,907: WARNING/ForkPoolWorker-1] 32
[2017-12-22 07:13:57,910: INFO/ForkPoolWorker-1] Task tests.tasks.add[3f9c7c88-61aa-44cc-a517-14f32305ad64] succeeded in 0.00268728499941s: None
[2017-12-22 07:14:07,903: INFO/MainProcess] Received task: tests.tasks.add[90e4277b-7041-4c3a-905c-1a5e16272d31]  
[2017-12-22 07:14:07,907: WARNING/ForkPoolWorker-1] 32
[2017-12-22 07:14:07,910: INFO/ForkPoolWorker-1] Task tests.tasks.add[90e4277b-7041-4c3a-905c-1a5e16272d31] succeeded in 0.0029478570068s: None

配置不正確的話,會報supervisor ERROR (spawn error)錯誤,可以使用tail命令看下錯誤日誌:

supervisorctl tail celerybeat stdout

查看管理的子進程運行狀態:

$ supervisorctl status
celerybeat                       RUNNING   pid 66802, uptime 0:12:59

關閉子進程:

supervisorctl stop celerybeat

不加參數的直接運行supervisorctl命令,會進入supervisor客戶端的交互終端進行操作。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Angular 是 Google 親兒子,React 是 Facebook 小正太,那咱為啥偏偏選擇了 Vue 下手,一句話,Vue 是咱見過的最對脾氣的 MVVM 框架。之前也使用過 knockout,angular,react 這些框架,但都沒有讓咱產生 follow 的衝動。直到見到 Vue,... ...
  • 1.基礎知識點 1.1 webpack 是一個現代 JavaScript 應用程式的模塊打包器(module bundler)。當 webpack 處理應用程式時,它會遞歸地構建一個依賴關係圖(dependency graph),其中包含應用程式需要的每個模塊,然後將所有這些模塊打包成一個或多個 b ...
  • 統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:mye ...
  • 一、模板方法定義 定義一個操作中的某種演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類在不改變一個演算法結構的前提下,對這些步驟進行個性化定義。 二、模板方法程式構成 在模板方法設計模式中,存在一個父類,其中包括兩類方法:模板方法和步驟方法。 模板方法,即實現某種演算法的方法步驟。而這些步驟都 ...
  • 轉載自:http://blog.csdn.net/xu__cg/article/details/53024490 抽象構件 具體構建 裝飾角色 具體裝飾角色 客戶端 ...
  • Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。 它是為瞭解決企業應用開發的複雜性而創建的。框架的 ...
  • 解決完畢後效果圖: 好友列表Vector添加的時候進行判斷,如果有相同的則不添加 int flag=0; for (int i = 0; i < names.size(); i++) { if (name.equals(names.get(i))) { flag=1; } } if(flag==0) ...
  • 學Python這麼久了,第一次寫一個這麼多的代碼(我承認只有300多行,重覆的代碼挺多的,我承認我確實垃圾),但是也挺不容易的 自定義函數+裝飾器,每一個模塊寫的一個函數 很多地方能用裝飾器(邏輯跟不上,有的地方沒用),包括雙層裝飾器(不會),很多地方需要優化,重覆代碼太多 我還是把我的流程圖拿出來 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...