linux+nginx+uwsgi+flask部署四部曲之一:安装python3.6
linux+nginx+uwsgi+flask部署四部曲之二:安装uwsgi
linux+nginx+uwsgi+flask部署四部曲之三:安装nginx
linux+nginx+uwsgi+flask部署四部曲之四:部署flask应用程序
前言
这篇文章是部署四部曲的后续,在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务。
所以,就需要一个工具,时刻监控 web 应用的运行情况,管理该进程。
Supervisor 就是解决这种需求的工具,可以保证程序崩溃后,重新把程序启动起来等功能。
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不仅仅是 Python 进程)。
Supervisor 是一个 C/S 模型的程序,supervisord
是 server 端,supervisorctl
是 client 端。
一、centos7安装supervisord
#yum -y install supervisor
安装路径/usr/bin/supervisord,配置文件/etc/supervisor.conf
二、program 配置
#vim /etc/supervisord.conf
在配置文件中;
是注释符,去掉前面的分号:
[program:score_api]
command = uwsgi --gevent 100 --gevent-early-monkey-patch /usr/local/flasky/uwsgi.ini ; 启动命令
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /usr/local/flasky/supervisorlog/supervisor_flask.log # 运行日志
;然后确保杀死主进程后,子进程也可以停止
stopasgroup=true
killasgroup=true
二、手动启动/关闭
supervisor手动启动:
#/usr/bin/supervisord -c /etc/supervisor.conf
或者
supervisord -c /etc/supervisord.conf
supervisor手动关闭:
#/usr/bin/supervisorctl stop all 先关闭supervisor启动脚本,之后再关闭supervisord服务
#kill pid
查看是否运行:
ps aux | grep supervisord #查看supervisord是否启动
ps aux | grep uwsig #查看uwsgi是否被启动了
supervisorctl 操作
输入命令 supervisorctl
进入 supervisorctl 的 shell 交互界面,就可以在下面输入命令了。:
- help # 查看帮助
- status # 查看程序状态
- stop program_name # 关闭 指定的程序
- start program_name # 启动 指定的程序
- restart program_name # 重启 指定的程序
- tail -f program_name # 查看 该程序的日志
- update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)
也可以直接通过 shell 命令操作:
- supervisorctl status
- supervisorctl update
- ......
三、添加开机自启动服务:
supervisord开机自启动脚本(各版本系统):https://github.com/Supervisor/initscripts
centos7 开机自启动脚本:
#vim /lib/systemd/system/supervisord.service
# supervisord service for sysstemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
这个自启动脚本需要修改/etc/supervisord.conf配置文件:
#vim /etc/supervisrod.conf
nodaemon=false 改成true
或者:#vim /lib/systemd/system/supervisord.service
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
无需修改/etc/supervisord.conf配置文件
两个自启动脚本都能够添加到systemctl自启动服务
#systemctl enable supervisord.service
#systemctl start/restart/stop supervisor.service
参考: