supervisor 使用教程(轉)


原文地址:https://word.gw1770df.cc/2016-08-04/linux/supervisor-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/

Supervisor

官網為 http://supervisord.org/

A Process Control System

使用b/s架構、運行在類Unix系統上一個進程監控管理系統

它可以使進程以daemon方式運行,並且一直監控進程,在意外退出時能自動重啟進程。

 

安裝

Supervisor是使用python開發的一個進程管工具,安裝和使用都非常簡單。使用 pip 或者 easy_install 安裝會非常方便,自動解決依賴關系。
– sudo pip install supervisor
– sudo easy_install supervisor

pip的安裝請參考 Python pip 安裝使用教程

初識

安裝完成后系統會增加幾個命令
supervisord 用於啟動supervisor服務。
supervisorctl 用於管理supervisor服務,管理使用supervisor啟動的進程。

安裝好supervisor后需要手動的生成配置文件。
echo_supervisord_conf | sudo tee /etc/supervisord.conf
supervisor默認讀取的配置文件為/etc/supervisord.conf,建議將配置文件放在此位置。

我們先簡單的查看一下 supervisord.conf,配置文件格式和ini格式配置文件相同,由節、鍵、值組成,配置文件注釋為;

    • [unix_http_server]
      此節是配置連接supervisord的sock的文件,包括sock文件路徑,用戶認證。使用supervisorctl命令進行管理進程時,使用的就是此sock文件。默認保持開啟,如將此項關閉 [inet_http_server] 則無法使用。
    • [inet_http_server]
      此節配置supervisor的web管理界面,配置監聽的地址和端口,已經用戶認證。默認為關閉狀態。如需開啟則將此節注釋去掉,然后修改相應的鍵值。
    • [supervisord]
      此節為配置supervisor服務參數,例如日志,日志大小等一些參數。
    • [supervisorctl]
      用於配置supervisorctl管理程序參數,例如sock文件路徑,需要和[unix_http_server]相同。
    • [include]
      此節作用為包含其他配置文件,本文建議開啟此項,包含額外的配置文件,將需要管理的進程配置寫入到額外的配置文件,不需要經常編輯主配置文件,保證安全性。修改代碼為
[include]
files = /etc/supervisor.d/*.conf

讀取/etc/supervisor.d/文件夾下所有后綴為conf的文件。

第一步

配置第一個使用supervisord管理的程序

我們使用 python2.7 來作為演示,使用SimpleHTTPServer模塊方便快速的啟動一個http server。
1,創建配置文件 /etc/supervisor.d/test1.conf,寫入一下內容

[program:simplehttpserver]
command=/usr/bin/env python2.7 -m SimpleHTTPServer 20080

這是一個最簡單的例子,第一行指定當前配置的程序名稱。第二行程序運行命令(20080 為 http server端口號)。
2,第一個程序已經配置好,接下來就可以啟動supervisord來查看一下效果。
輸入命令 sudo supervisord 即可啟動服務。
很多機器會打印出幾行信息,這並不代表程序出錯,意思是

“supervisord 是使用root身份來啟動的,讀取默認位置的配置文件,如果需要讀取其他位置配置文件請使用 -c 參數”

3,現在使用ps -ef | grep python來檢查一下剛才配置的程序是否已經啟動。到此為止我們的第一步已經完成。

詳細配置

[program:theprogramname]
command=/bin/cat              ; 程序運行命令,建議使用絕對路徑。
process_name=%(program_name)s ; 程序名稱,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄)。 一般程序需要運行多個副本的情況會使用。后面會有例子。
numprocs=1                    ; 程序運行的副本個數,默認為1,如果值大於1,則`process_name` 必須包含 `%(process_num)s`
numprocs_start=0              ; `%(process_num)s`起始數字,默認為0
00=/tmp                ; 程序運行的所在目錄,相當於先cd到指定目錄,然后運行程序。
umask=022                     ; umask for process (default None)
priority=999                  ; 程序操作的的優先級,例如在start all/stop all,高優先級的程序會先關閉和重啟。
autostart=true                ; 在supervisord啟動時自動啟動,默認為true
startsecs=1                   ; 程序啟動前等待時間等待時間。默認為1。
startretries=3                ; 嘗試重啟最大次數。默認為3。
autorestart=unexpected        ; 是否自動重啟,可選參數為 false, unexpected, true。如果為false則不自動重啟,如果為unexpected表示如果程序退出信號不在 `exitcodes` 中,則自動重啟。默認為unexpected
exitcodes=0,2                 ; 程序退出碼。配合`autorestart`使用。默認為 0,2
stopsignal=QUIT               ; 殺死進程是發送的信號,默認為TREM。
stopwaitsecs=10               ; 發送SIGKILL信號前最大等待時間。默認為10。
user                          ; 以指定用戶身份啟動程序。默認為當前用戶。
stopasgroup=false             ; 是否向子進程發送停止信號,這對於Flask的debug模式很有用處,如果設置為true,則不向子進程發送停止信號。默認為false
killasgroup=false             ; 是否向子進程發送kill信號,默認為false
redirect_stderr=false         ; 將錯誤輸出定向到標准輸出,默認為false
stdout_logfile=/a/path        ; 標准輸出日志路徑,可選參數為 `自定義` `AUTO` `NONE`,`自定義`將日志寫到自定義路徑,可用的變量有`group_name`, `host_node_name`, `process_num`, `program_name`, `here`(配置文件目錄);`NONE`不創建日志;`AUTO` 又supervisord自動選擇路徑,並且當supervisord服務重新啟動時原來自動創建的日志以及日志的備份文件會被刪除。默認為AUTO
stdout_logfile_maxbytes=1MB   ; 標准輸出日志單個文件最大大小,如果超過指定大小會將日志文件備份,可用的單位 KB MB GB。如果設置為0則表示不限制文件大小。默認為50MB
stdout_logfile_backups=10     ; 標准輸出日志文件最大備份數。默認為10
stdout_capture_maxbytes=1MB   ; 當進程處於“stdout capture mode”模式下寫入到FIFO隊列最大字節數,可用單位 KB MB GB。默認為0,詳細說明見[capture-mode](http://supervisord.org/logging.html#capture-mode)
stdout_events_enabled=false   ; 
                              ;以下配置項配置錯誤輸出的日志參數。和上面標准輸出配置相同。
stderr_logfile=/a/path        ;
stderr_logfile_maxbytes=1MB   ;
stderr_logfile_backups=10     ;
stderr_capture_maxbytes=1MB   ;
stderr_events_enabled=false   ;
environment=A="1",B="2"       ; 環境變量設置,可用的變量有 `group_name`, `host_node_name`, `process_num`, `program_name`, `here`。 默認為空。
serverurl=AUTO                ; override serverurl computation (childutils)
  • 必要參數只有 command,其他未可選參數。
  • [program:x] 自定義的程序名不能重復

配置示例

管理tornado應用

需要啟動4個進程,分別監聽四個連續端口(20081 – 20084)。
將錯誤輸出定向到標准輸出,每個端口標准輸出寫入到不同文件中,單個文件最大50MB,最多保存3個備份。
啟動前等待3秒。
supervisord啟動時自動啟動。程序運行出錯自動重啟,最大嘗試重啟次數3次。

[program:tornado-test]
command=/usr/bin/env python2.7 /home/user/tornado-test.py --port=%(process_num)s
process_name=%(program_name)s_port=%(process_num)s
numprocs=4
numprocs_start=20081
redirect_stderr=true
stdout_logfile=/tmp/tornado-test-%(process_num)s.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=3
autorestart=true
startsecs=3
startretries=3

管理nginx

nginx默認運行狀態是后台運行程序。supervisord不能管理此類程序需要,需要修改nginx主配置文件。
在nginx最外層加入daemon off;

最簡單的配置。

[program:nginx]
command=/usr/sbin/nginx ;建議使用絕對路徑。

supervisorctl

supervisor進程管理工具,可以方便啟動停止進程,查看程序日志,重新載入配置文件。
如果supervisord配置文件不再默認位置,使用supervisorctl工具時需要指定配置文件路徑 supervisordctl -c 配置文件路徑
常用命令

  • supervisordctl status 查看進程運行狀態
  • supervisordctl start 進程名 啟動進程
  • supervisordctl stop 進程名 關閉進程
  • supervisordctl restart 進程名 重啟進程
  • supervisordctl update 重新載入配置文件
  • supervisordctl shutdown 關閉supervisord
  • supervisordctl clear 進程名 清空進程日志
  • supervisordctl 進入到交互模式下。使用help查看所有命令。

start stop restart + all 表示啟動,關閉,重啟所有進程。

如果一個進程啟動了多個副本,例如上文tornado-test
關閉所有副本

 

參考:

https://www.cnblogs.com/ajianbeyourself/p/5534737.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM