supervisor管理后台进程
在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 # 载入最新的配置文件,重载进程
参考链接:
Django+uWSGI+Nginx部署 https://www.cnblogs.com/zzqit/p/10103303.html
https://www.jianshu.com/p/23762bd086e1