辽宁城市建设职业技术学院教务网站,网站版式布局,企业网站深圳,wordpress 定时任务supervisor uwsgi 部署python服务流程 最近由于某个python服务不稳定#xff0c;有时候是造成服务器down机#xff0c;有时候是服务本身突然就挂了。查了一下原因#xff0c;发现是内存资源占用过高导致的#xff0c;
为了让服务稳定运行#xff0c;便打算引入superviso…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]
commandbash /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) priority999 ; the relative start priority (default 999)
autostarttrue ; start at supervisord start (default: true)
startsecs10 ; # of secs prog must stay up to be running (def. 1)
startretries3 ; max # of serial start failures when starting (default 3) stopsignalINT ; signal used to kill process (default TERM) stopasgrouptrue ; send stop signal to the UNIX process group (default false)
killasgrouptrue ; SIGKILL the UNIX process group (def false)
usertest ; setuid to this UNIX account to run thell program
redirect_stderrtrue ; redirect proc stderr to stdout (default false)
stdout_logfile/data/project/logs/supervisor.log ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes100MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups10 ; # 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
oldserviceps -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
chmod0766 ; socket file mode (default 0700) [supervisord]
logfile/data/project/logs/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups10 ; # of main logfile backups; 0 means none, default 10
loglevelinfo ; log level; default info; others: debug,warn,trace
pidfile/data/project/runconfig/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemonfalse ; start in foreground if true; default false
silentfalse ; no logs to stdout if true; default false
minfds1024 ; min. avail startup file descriptors; default 1024
minprocs200 ; min. avail process descriptors;default 200
usertest ; setuid to this UNIX account at startup; recommended if root [rpcinterface:supervisor]
supervisor.rpcinterface_factory supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]
serverurlunix:///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]
Descriptionsupervisor daemon
#Afterrc-local.service nss-user-lookup.target
[Service]
Typeforking
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
KillModeprocess
Restarton-failure
RestartSec42s
Usertest
[Install]
WantedBymulti-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服务进程状态