supervisor + uwsgi 部署python服务流程

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服务进程状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux centos 部署 jenkins

一、试了用容器部署,不行。(建议别用容器部署) 二、直接部署在主机上 1、安装java环境 yum install java-11-openjdk-devel # 检查 java -version # 打印 [rootiZwz9a99mctbkabkh2imhdZ init.d] java -version openjdk version "11.0.21" 2023-10-17 L…

轻松上手:Postman Interceptor 插件使用指南

什么是 Postman? Postman 是一种用于测试和开发 API 的工具,让开发者可以轻松地构建、发送、调试 HTTP 请求,并检查响应结果。通过Postman,开发者可以在不编写代码的情况下快速测试 API 的正确性和可靠性。Postman 还支持协作和自…

Cesium加载大规模三维数据渲染性能优化方案

根据实际项目经验和近期的论文,总结一下Cesium加载大规模三维数据性能优化方法。个人认为在实际的GIS数字孪生项目中,其可行的优化手段主要有三种: (1)通过专业的转换工具CesiumLab等对原始的三维模型进行轻量化处理,包…

第4课 FFmpeg读取本地mp4文件并显示

在上节课,我们使用FFmpeg实现了一个最简单的rtmp播放器,它看起来工作正常。这节课,我们尝试让它来播放本地的mp4文件试试。 1.压缩备份上节课工程文件夹为demo3.rar,并修改工程文件夹demo3为demo4,重要的事情再说一遍…

sql执行顺序

sql执行顺序 1.from 2.on 3.join 4.where 5.group by(开始使用select中的别名,后面的语句中都可以使用) 6.avg,sum.... 7.having 8.select 9.distinct 10.order by 11.limit 从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,…

rime中州韵小狼毫 Upper lua Filter 首字母大写滤镜

在 rime中州韵小狼毫 easyEnglish输入法 一文中, 我们定义了 easy-English 输入方案。输入效果如下👇: 我们知道,在英文世界中,单词有首字母大写的习惯,如果我们输入 english 单词后,再回来改…

力扣hot00 二叉树的中序遍历

👨‍🏫 题目地址 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left…

Qt6.5类库详解:QComboBox

哈喽大家好,欢迎关注公众号(20YC编程),有免费C视频课程哦! -今日内容- 1. QComboBox介绍 QComboBox是一个下拉列表框组件类,它提供了一个下拉列表供用户选择,也可以直接当作一个QLineEdit用作输入。 QComboBox除了显…

模糊查询导致索引失效怎么解决

模糊查询导致索引失效可能是由于模糊查询的特性,使得数据库引擎难以有效利用索引。以下是一些解决方法: 1、前缀索引: 如果你的模糊查询是以字符串的开头进行的,考虑使用前缀索引。前缀索引只包含列值的开头部分,可以…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

关于Spring @Transactional事务传播机制详解

Spring事务传播机制 1.什么是事务传播机制?2.Spring事务传播类型Propagation介绍3.具体案例总结 Spring事务传播机制 1.什么是事务传播机制? 举个栗子,方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目,主要来提供关于客户端的负载均衡能力。从多个服务提供方,选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB(负载均衡)客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…

什么是 NAS?

一、什么是 NAS? 在数字化时代,小型企业面临着日益增长的数据存储需求。为了应对这一挑战,网络附加存储(NAS)系统成为了许多企业的首选解决方案。NAS系统是一种连接到网络的存储设备,允许授权网络用户和异…

软件测试作业‖pytest+po+csv+html报告+cookie+selenium

软件测试作业‖pytestpocsvhtml报告cookieselenium 先用本地部署的系统试了下 或者UFT自动化测试里诺图书管理系统软件测试 # ,#测试报告# #性能测试#,#测试用例#, #自动化测试# Selenium 的 Web自动化测试基本要求和注意事项 1.请使用ch…

JRT控制打印机

本次测试打印机控制和纸张方向控制。 打印机状态 选择打印机 控制纸张 定义纸张 旋转纸张 不旋转纸张 A4

Oracle清理审计和监听垃圾文件脚本

Oracle用户删除审计文件自动化脚本 $(ORACLE) vi oracle_auto_trace_del.sh#!/bin/bash #ORACLE cd /opt/oracle/app/oracle/admin/SID(数据库实例名)/adump find . -type f -name "*.aud" -mtime 10 |xargs rm -rf$(ORACLE&#…

三、C语言中的分支与循环—goto语句 (10) (完)

在C语言中,goto语句允许程序无条件地跳转到同一函数内的标记位置。这个标记位置通过一个标签和冒号(:)来标示。goto语句可以用于从深层嵌套的循环或条件语句中直接跳出,或者跳过某些代码执行。尽管goto语句在某些情况下可以使程序逻辑变得清晰&#xff0…

C++中互斥量、锁有什么用?

文章目录 互斥量如何理解互斥量C 中互斥量的用法基本锁定和解锁使用 std::lock_guard 自动管理锁使用 std::unique_lock 获得更多控制 注意事项 几种不同类型的锁 创建一个C线程需要传入几个参数? 如何理解和使用C线程循环 C 类 函数 变量 进程 线程 C关于锁和互斥量…

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元(ADU) Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…

openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作

文章目录 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作183.1 就地升级和灰度升级操作步骤 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作 介绍就地升级、灰度升级和滚动升级的详细操作。 183.1 就地升级和灰度升级操作步骤 以root身份登录节点。 …