Supervisor通用配置

Sean_Yang發表於2020-07-22

1、簡介

supervisor是python開發的一個程式管理工具,可以將一個普通的命令列程式變為後臺的守護程式,並且監控程式的執行狀態,如果因為異常退出的時候會自動重啟。它是通過fork/exec的方式把這些被管理的程式當作supervisor的子程式來啟動,這樣只要在supervisor的配置檔案中,把要管理的程式的可執行檔案的路徑寫進去即可。也實現當子程式掛掉的時候,父程式可以準確獲取子程式掛掉的資訊的,可以選擇是否自己啟動和報警。supervisor還提供了一個功能,可以為supervisord或者每個子程式,設定一個非root的user,這個user就可以管理它對應的程式。

  • supervisord

執行superior的時候會啟動一個程式superiord,他主要是負責啟動所管理的程式,並且將所管理的程式作為自己的子程式來啟動,而且可以在所管理的程式出現崩潰的時候自動重啟

  • supervisorctl

它是supervisor的命令列管理工具,可以執行stop,start,restart,status,update等指令,來對這些子程式進行管理。

supervisor是所有程式的父程式,管理所有的子程式,supervisor以子程式的PID來管理子程式,當子程式異常退出的時候supervisor可以收到相應的訊號量

2、安裝supervisor

因為supervisor是基於python來執行的,所以我們的伺服器上必須有python環境,但是如果你伺服器上跑的是django或者其他的python專案必然基於python環境,如果supervisor管理的後臺服務比較多的話肯定會有一些影響,所以supervisor的安裝會建立一個新的虛擬環境。

1、安裝Python3.8.2

# 下載python
> wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz

# 解壓安裝包
> tar -xf Python-3.8.2.tar.xz

# 進入目標檔案
> cd Python-3.8.2

# 配置安裝目錄
> ./configure --prefix=/usr/local/python3

# 編譯&安裝
> make && sudo make install

# 建立軟連線:python3,pip3
> ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
> ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

# 刪除安裝包與檔案
> rm -rf Python-3.8.2
> rm -rf Python-3.8.2.tar.xz

2、安裝python虛擬環境

# 1、安裝工具包
> pip3 install virtualenv
> pip3 install virtualenvwrapper

# 注意:有些直譯器無法直接安裝virtualenvwrapper包,可能是因為缺少依賴,可以先安裝一下下面兩個包
> pip3 install pbr
> pip3 install stevedore

# 2、建立虛擬環境軟連結
> ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

# 3、配置虛擬環境對應環境變數
> vim ~/.bash_profile

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 指定virtualenv的路徑
source /usr/local/bin/virtualenvwrapper.sh

# 4、更新配置檔案內容

> source ~/.bash_profile

所有的虛擬環境檔案都指定存放在~/.virtualenvs 目錄

3、建立python虛擬環境

# 1、建立虛擬環境
> mkvirtualenv supervisor_env # 虛擬環境名稱

# 2、管理虛擬環境
> workon  # 進入虛擬環境只需要在後面加上虛擬環境名稱

# 3、退出虛擬環境
> deactivate

4、supervisor安裝

# 安裝
> pip install supervisor

# 生成配置檔案
> echo_supervisord_conf > supervisord.conf

3、配置supervisor

5、superiord.conf

# 指定socket檔案路徑
[unix_http_server]
file=/root/work/manager/supervisor/supervisor.sock   ; the path to the socket file

[supervisord]
logfile=/root/work/manager/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/root/work/manager/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
silent=false                 ; no logs to stdout if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200

[supervisorctl]
serverurl=unix:///root/work/manager/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket

# 指定分發所有子程式的配置目錄,預設子程式配置檔案為ini格式
[include]
files = conf.d/*.ini

6、例:conf.d/onlydaya.ini

將不同分類的子程式單獨使用配置檔案,便於後期管理。下面的例子是後臺啟動uwsgi

# 專案名稱
[program:onlydata]
# 指令碼目錄
directory=/root/work/code/python/onlydata
# 指令碼執行命令
command=/root/.virtualenvs/onlydata/bin/uwsgi --ini /root/work/code/python/onlydata/onlydata/uwsgi.ini 
# 日誌輸出
stderr_logfile=/root/work/code/python/onlydata/uwsgi.err.log
stdout_logfile=/root/work/code/python/onlydata/uwsgi.out.log 
# 指令碼執行的使用者身份
user=root
stopsignal=INT
# 這個選項是子程式啟動多少秒之後,此時狀態如果是running,則我們認為啟動成功了。預設值為1
startsecs=1

4、supervisor常用命令

supervisorctl status        //檢視所有程式的狀態
supervisorctl stop es       //停止es
supervisorctl start es      //啟動es
supervisorctl restart       //重啟es
supervisorctl update        //配置檔案修改後使用該命令載入新的配置
supervisorctl reload        //重新啟動配置中的所有程式

也可以通過supervisorctl進入supervisor的shell介面,直接進行命令操作

補充:

systemctl start supervisord.service     //啟動supervisor並載入預設配置檔案
systemctl enable supervisord.service    //將supervisor加入開機啟動項

相關文章