supervisor 使用
简介
详情见官网: http://supervisord.org/
简单来说, 当我们在linux 服务器进行部署服务时, 比如 flask项目, 这个时候如果使用 main.py的形式启动(现不说 gunicorn ), 你就必须得保持 shell 界面的开启.
那我们想要他后台一直启动, 该如何呢? 可以使用 nohup等方式,但当进程异常退出了, 我们的服务也就停了.
现在需要一个能够管理我们的服务的程序, 能让我们服务24小时运行, 并且异常退出了还能重新拉起一个新的进程服务.
supervisor 就是做这个的.
组件
- supervisor:
- supervisord:
supervisord是supervisor的服务端程序。
干的活:启动supervisor程序自身,启动supervisor管理的子进程,响应来自clients的请求,重启闪退或异常退出的子进程,把子进程的stderr或stdout记录到日志文件中,生成和处理Event
- supervisorctl:
如果说supervisord是supervisor的服务端程序,那么supervisorctl就是client端程序了。
supervisorctl有一个类型shell的命令行界面,我们可以利用它来查看子进程状态,启动/停止/重启子进程,获取running子进程的列表等等。。。最牛逼的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的,远程是通过TCP socket连接的。
安装
yum install supervisor
生成配置
echo_supervisord_conf
echo_supervisord_conf > /etc/supervisord.conf
修改主配置
vim /etc/supervisord.conf
# 开启web管理界面, 注意公网安全问题
[inet_http_server]
port=10.0.0.1:9001
username=xxxx
password=xxxx
# 配置监控进程的配置文件目录
[include]
files = /etc/supervisord.d/*.ini
添加子进程配置文件
#项目名
[program:blog]
#脚本目录
directory=/opt/bin
#脚本执行命令
command=/usr/bin/python /opt/bin/test.py
# 这里可以配置启动的环境变量
environment=PROJECT_ENV=onlie
#supervisor启动的时候是否随着同时启动,默认True
autostart=true
#当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart=true
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1
#脚本运行的用户身份
user = test
#日志输出
stderr_logfile=/tmp/blog_stderr.log
stdout_logfile=/tmp/blog_stdout.log
#把stderr重定向到stdout,默认 false
redirect_stderr = true
#stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20
#stdout日志文件备份数
stdout_logfile_backups = 20
开启服务
systemctl status supervisord
systemctl start supervisord