环境:
- ubuntu:16.04
- python2.7(因为只有Python2.7支持安装supervisor)
安装supervisor:
1、pip 安装:pip install supervisor
2、wget https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz --> tar -zxvf XXX 解压 --> cd 进去 -->python setup.py install
安装完成之后要手动生成配置文件(supervisord.conf):
注意:以下所有修改后的路径的文件夹如果不存在要自己手动建立,文件不用,系统会自动建立
echo_supervisord_conf > /etc/supervisord.conf
这个命令会在/etc文件夹下生成一个supervisord.conf文件,就是supervisord的配置文件,然后这个配置文件是需要修改的,它的很多默认文件会建立在/tmp文件夹中,不是很合理,具体需要修改的地方有:在你的配置文件中找到这几句,改成你想放置的位置。
[unix_http_server]
file=/root/supervisor/supervisor.sock ; the path to the socket file
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; main log file; default
pidfile=/root/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
[supervisorctl]
serverurl=unix:///root/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
运行supervisord:
- 在真正应用它的管理进程的功能之前,首先应该启动服务:supervisord -c /etc/supervisord.conf # -c 后面的位置是你开始生成配置文件的路径
- 运行supervisorctl status没有报错,就说明启动成功
- 控制进程用到的是supervisorctl这个命令,supervisord是用来启动服务。
- supervisorctl status 没有输出任何东西是因为现在你并没有把任何服务托管给supervisor,以下举了例子,将uwsgi托管给supervisor
将uwsgi托管给supervisor
- 编辑一个针对于此uwsgi的配置文件,uwsgi.conf(这个文件中应用到的uwsgi.ini文件是我配置uwsgi+nginx+django部署写的,这里只是打个样子,具体需求看自己)
[program:uwsgi] ;这里的uwsgi是自定义的进程名称
directory = /root/proj/conf ;下一句command需要用到的uwsgi.ini文件所在的位置
command = uwsgi --ini uwsgi.ini ;表示启动uwsgi服务的命令
autostart = true
startsecs = 5
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /etc/supervisor/log/uwsgi/face_check.log ;将这个uwsgi服务的应用日志记录路径
- 修改supervisord.conf文件,将刚刚的uwsgi.conf引入
- 在配置文件的最后(应该是)找一下,将注释去掉,意思是引入/etc/supervisor/中的所有文件
[include]
files = /etc/supervisor/*
最后重启一下supervisord,详见 https://blog.csdn.net/weixin_41068851/article/details/83651699
常用命令
- supervisorclt status 查看所有托管进程的状态
- supervisorclt start name_1 或者 name_2 name_3 或者 all 开启进程
- supervisorclt stop name_1 或者 name_2 name_3 或者 all