1. 程式人生 > >supervisor管理後臺進程

supervisor管理後臺進程

安裝配置 新建 127.0.0.1 code 重啟進程 www backup uwsgi trac

在linux中supervisor是用來管理後臺進程的,是一個用python寫的進程管理工具,可以讓宕機的進程重啟。這裏我們大概講一下用他來管理uWSGI。

一.安裝supervisor

1.python2下的安裝

supervisor不支持python3,所以你安裝可以使用自帶的python2安裝,但是自帶的python2沒有安裝pip

(1)要安裝pip,首先要安裝setuptools

wget https://pypi.python.org/packages/ff/d4/209f4939c49e31f5524fa0027bf1c8ec3107abaf7c61fdaad704a648c281/setuptools-21.0.0.tar.gz#md5=81964fdb89534118707742e6d1a1ddb4

tar xvf setuptools-21.0.0.tar.gz            //解壓文件

cd setuptools-21.0.0

python setup.py install

(2)安裝pip

wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz

tar xvf pip-9.0.1.tar.gz 

cd pip-9.0.1

python setup.py install

(3)安裝supervisor

pip install supervisor

2.python3下的安裝

默認的pip安裝的只支持python2,當然手動安裝新版就支持python3了

pip install git+https://github.com/Supervisor/supervisor

二.配置supervisor

生成 supervisor 默認配置文件,放在 /etc/supervisord.conf 路徑中:

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件

# 修改配置文件
vi /etc/supervisord.conf

# 加入以下配置信息在最下面
[include]
files = /etc/supervisord.d/*.conf   # /etc/supervisord.d/下所有conf結尾的
[inet_http_server] port=9001 # 端口號 username=user # web登錄名 password=123 # 登錄密碼

配置文件詳情

技術分享圖片
 1 [unix_http_server]
 2 file=/tmp/supervisor.sock   ; UNIX socket 文件,supervisorctl 會使用
 3 ;chmod=0700                 ; socket 文件的 mode,默認是 0700
 4 ;chown=nobody:nogroup       ; socket 文件的 owner,格式: uid:gid
 5 ;username=user              ; default is no username (open server)
 6 ;password=123               ; default is no password (open server)
 7 
 8 ;[inet_http_server]         ; HTTP 服務器,提供 web 管理界面
 9 ;port=127.0.0.1:9001        ; Web 管理後臺運行的 IP 和端口,如果開放到公網,需要註意安全性
10 ;username=user              ; 登錄管理後臺的用戶名
11 ;password=123               ; 登錄管理後臺的密碼
12 
13 [supervisord]
14 logfile=/tmp/supervisord.log ; 日誌文件,默認是 $CWD/supervisord.log
15 logfile_maxbytes=50MB        ; 日誌文件大小,超出會 rotate,默認 50MB
16 logfile_backups=10           ; 日誌文件保留備份數量默認 10
17 loglevel=info                ; 日誌級別,默認 info,其它: debug,warn,trace
18 pidfile=/tmp/supervisord.pid ; pid 文件
19 nodaemon=false               ; 是否在前臺啟動,默認是 false,即以 daemon 的方式啟動
20 minfds=1024                  ; 可以打開的文件描述符的最小值,默認 1024
21 minprocs=200                 ; 可以打開的進程數的最小值,默認 200
22 
23 ; the below section must remain in the config file for RPC
24 ; (supervisorctl/web interface) to work, additional interfaces may be
25 ; added by defining them in separate rpcinterface: sections
26 [rpcinterface:supervisor]
27 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
28 
29 [supervisorctl]
30 serverurl=unix:///tmp/supervisor.sock ; 通過 UNIX socket 連接 supervisord,路徑與 unix_http_server 部分的 file 一致
31 ;serverurl=http://127.0.0.1:9001 ; 通過 HTTP 的方式連接 supervisord
32 
33 ;包含其他的配置文件
34 [include]
35 files = relative/directory/*.ini    ; 可以是 *.conf 或 *.ini
View Code

啟動supervisor

supervisord -c /etc/supervisord.conf

再啟動的時候可能會報錯,Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord。

解決的是方式:

unlink /tmp/supervisor.sock

通過http://ip:9001/訪問web界面,賬戶名密碼就是你配置的,效果如下

技術分享圖片

三.加入監控程序

新建管理的監控文件夾,每個程序設置配置文件,達到隔離的效果

mkdir /etc/supervisord.d/

在/etc/supervisor.d/目錄下面加入需要管理的程序

vi /etc/supervisor.d/orange_web.conf  # 新建一個管理程序

# 程序的名字,在supervisor中可以用這個名字來管理該程序,隨便起
[program:orange_web]
# 指定運行用戶
user = root
# 啟動程序的命令uwsgi啟動命令
command = uwsgi --ini /var/www/script/uwsgi.ini
# 項目的目錄
directory = /var/www/orange_web
# 開始的時候等待多少秒
startsecs = 0
# 停止的時候等待多少秒
stopwaitsecs = 0
# 設置改程序是否雖supervisor的啟動而啟動
autorstart = true
# 程序掛了是否需要重新將其啟動
autorestart = true
# 是否將程序錯誤信息重定向到文件
redirect_stderr=true
# 輸出的log文件位置
stdout_logfile = /var/www/script/supervisord.log
# 輸出的錯誤文件位置
stderr_logfile = /var/www/script/supervisord.err

[supervisord]
# log的級別
loglevel = info

重新啟動supervisord

supervisorctl reload  # 重啟

重新訪問supervisor管理界面

技術分享圖片

在這裏就安裝配置成功了,哈哈哈就可以去跟周圍的女同學裝逼了。。

四.supervisor常用命令

supervisorctl start programXX  # 啟動進程programXX  

supervisorctl stop programXX  # 停止進程programXX  

supervisorctl restart programXX  # 重啟進程programXX

supervisorctl stop groupworker  # 停止所有名為groupworker這個分組的進程(start,restart都可用)

supervisorctl stop all  # 停止所有進程(start,restart都可用,但是都不會載入最新的配置文件)

supervisorctl reload  # 載入最新的配置文件,重載進程

參考鏈接:

  supervisor    https://www.centos.bz/2018/05/%E4%BD%BF%E7%94%A8-supervisor-%E7%AE%A1%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B/

  Django+uWSGI+Nginx部署  https://www.cnblogs.com/zzqit/p/10103303.html

                https://www.jianshu.com/p/23762bd086e1

supervisor管理後臺進程