linux+nginx+uwsgi+flask部署四部曲后续:使用supervisor管理uwsgi服务

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

参考:

supervisor管理uwsgi服务(Ubuntu)

supervisord安装,启动/关闭,添加开机自启动服务

centos+flask+uwsgi+nginx+supervisor部署小结

猜你喜欢

转载自blog.csdn.net/qq_15111861/article/details/82251967