supervisor + uwsgi 部署python服务流程

13 篇文章 0 订阅

supervisor + uwsgi 部署python服务流程

最近由于某个python服务不稳定,有时候是造成服务器down机,有时候是服务本身突然就挂了。查了一下原因,发现是内存资源占用过高导致的,

为了让服务稳定运行,便打算引入supervisor + uwsgi对服务进行分布式部署。

第一步 安装 uwsgi和supervisor

由于我们是内网环境,所以需要先去下载安装包,可以根据需要选择版本

uwsgi 安装包 uWSGI 2.0.19 — uWSGI 2.0 documentation

supervisor 安装包 supervisor · PyPI

下载之后上传到服务器,解压python setup.py install 安装

第二步 python服务中加上uwsgi和supervisor的配置文件

可以在项目中新建一个目录runconfig,来放置配置

配置有两个uwsgi.ini和supervisor.ini

第三步 根据需要添加配置

参考配置

uwsgi.ini文件

[uwsgi]

module = app_starter:app

#用以启动程序名

processes = 2

#子进程数量

chdir = /data/project

#启动程序目录

pidfile = /data/project/runconfig/uwsgi.pid

chmod-socket = 660

# 当服务器退出时自动删除unix socket文件和pid文件

vacuum = true

#http地址和端口

http = 0.0.0.0:4000

# serializer requests

thunder-lock = true

# enable threads support

enable-threads = true

buffer-size = 32768

log-maxsize = 102400000

supervisor.ini文件

[program:uwsgi]

command=bash /data/project/runconfig/restart_service.sh              ; the program (relative uses PATH, can take args)

directory=/data/project              ; directory to cwd to before exec (def no cwd)

priority=999                  ; the relative start priority (default 999)

autostart=true                ; start at supervisord start (default: true)

startsecs=10                   ; # of secs prog must stay up to be running (def. 1)

startretries=3                ; max # of serial start failures when starting (default 3)

stopsignal=INT               ; signal used to kill process (default TERM)

stopasgroup=true             ; send stop signal to the UNIX process group (default false)

killasgroup=true             ; SIGKILL the UNIX process group (def false)

user=test                   ; setuid to this UNIX account to run thell program

redirect_stderr=true          ; redirect proc stderr to stdout (default false)

stdout_logfile=/data/project/logs/supervisor.log        ; stdout log path, NONE for none; default AUTO

stdout_logfile_maxbytes=100MB   ; max # logfile bytes b4 rotation (default 50MB)

stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)

第四步,增加重启配置脚本restart_service.sh

#!/bin/bash

set -e

cd /data/project

git pull

source /etc/profile

source /home/test/.bashrc

oldservice=`ps -ef | grep 'uwsgi.ini' | grep -v grep | awk '{print $2}'`

if [ -n "${oldservice}" ]; then

    uwsgi --stop /data/project/runconfig/uwsgi.pid

fi

uwsgi --ini /data/project/runconfig/uwsgi.ini

第五步 新增supervisord.conf文件

在/etc 目录下新建目录supervisor,

使用echo_supervisord_conf > /etc/supervisor/supervisord.conf在该目录下创建文件supervisord.conf

supervisord.conf的参考配置

[unix_http_server]

file=/data/project/runconfig/supervisor.sock   ; the path to the socket file

chmod=0766                 ; socket file mode (default 0700)

[supervisord]

logfile=/data/project/logs/supervisord.log ; main log file; default $CWD/supervisord.log

logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB

logfile_backups=10           ; # of main logfile backups; 0 means none, default 10

loglevel=info                ; log level; default info; others: debug,warn,trace

pidfile=/data/project/runconfig/supervisord.pid ; supervisord pidfile; default supervisord.pid

nodaemon=false               ; start in foreground if true; default false

silent=false                 ; no logs to stdout if true; default false

minfds=1024                  ; min. avail startup file descriptors; default 1024

minprocs=200                 ; min. avail process descriptors;default 200

user=test           ; setuid to this UNIX account at startup; recommended if root

[rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]

serverurl=unix:///data/project/runconfig/supervisor.sock ; use a unix:// URL  for a unix socket

[include]

files = /data/project/runconfig/supervisor*.ini

第六步设置开机自启

进入到/usr/lib/systemd/system/

cd /usr/lib/systemd/system/

创建文件supervisord.service

sudo vim supervisord.service

supervisord.service参考配置

[Unit]

Description=supervisor daemon

#After=rc-local.service nss-user-lookup.target

[Service]

Type=forking

ExecStart=/usr/local/python3817/bin/supervisord(根据自己安装目录修改) -c /etc/supervisor/supervisord.conf

ExecStop=/usr/local/python3817/bin/supervisorctl(根据自己安装目录修改) shutdown

ExecReload=/usr/local/python3817/bin/supervisorctl(根据自己安装目录修改) reload

KillMode=process

Restart=on-failure

RestartSec=42s

User=test

[Install]

WantedBy=multi-user.target

启用服务

systemctl enable supervisord

启动服务

systemctl start supervisord

查看服务状态

systemctl status supervisord

查看开机自启是否启用

systemctl is-enabled supervisord

supervisorctl的一些常用命令

supervisorctl shutdown 停止supervisord服务

supervisorctl reload 重启 supervisord服务

supervisorctl update 更新 supervisord.conf文件后重启服务

supervisorctl status 查看 supervisord服务进程状态

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值