使用 Supervisor 管理 Gunicorn 实现高可用 Python Web 应用

前言

在生产环境中,部署 Python Web 应用时,我们通常使用 Gunicorn(Green Unicorn)作为 WSGI 服务器。为了确保应用能够稳定运行,能够在崩溃后自动重启,Supervisor 是一个常用的进程管理工具,它可以很好地与 Gunicorn 配合使用,实现进程监控、自动重启等功能。

本文将详细介绍如何使用 Supervisor 来管理 Gunicorn,确保 Python Web 应用在生产环境中的高可用性。


目录

  • 前言
      • 1. 安装 Supervisor 和 Gunicorn
        • 安装 Gunicorn
        • 安装 Supervisor
      • 2. 配置 Gunicorn 启动命令
      • 3. 配置 Supervisor 管理 Gunicorn 进程
        • 创建 Gunicorn 配置文件
      • 4. 启动 Supervisor 管理 Gunicorn
      • 5. 检查 Gunicorn 服务状态
      • 6. 重启和停止 Gunicorn 服务
      • 7. 配置 Supervisor 开机自启
        • 使用 systemd(适用于 Ubuntu 16 及以上版本)
        • 使用 init.d(适用于较老的 Linux 系统)
      • 8. 使用 Gunicorn 的平滑重启功能
      • 9. 日志管理
      • 10. 总结

1. 安装 Supervisor 和 Gunicorn

在开始之前,我们需要安装 SupervisorGunicorn

安装 Gunicorn
pip install gunicorn
安装 Supervisor

在 Ubuntu/Debian 系统中,我们可以通过 apt 安装 Supervisor

sudo apt update
sudo apt install supervisor

在 CentOS/RHEL 系统中,可以通过 yum 安装:

sudo yum install supervisor

2. 配置 Gunicorn 启动命令

假设你的 Python Web 应用使用 Flask 或 Django 框架,Gunicorn 可以通过命令行启动。例如:

gunicorn --workers 3 myapp:app

在这个命令中:

  • --workers 3:指定启动 3 个 worker 进程来处理请求,提高并发能力。
  • myapp:appmyapp 是你的 Python 文件名,app 是 Flask 或 Django 中的应用对象。

3. 配置 Supervisor 管理 Gunicorn 进程

为了让 Supervisor 管理 Gunicorn 进程,我们需要创建一个配置文件。Supervisor 的配置文件通常放在 /etc/supervisor/conf.d/ 目录下。

创建 Gunicorn 配置文件

/etc/supervisor/conf.d/ 目录下创建一个名为 myapp.conf 的文件:

[program:myapp]
command=gunicorn --workers 3 myapp:app
directory=/path/to/your/app
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=yourusername
group=yourgroup
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
  • command:启动 Gunicorn 的命令,指定了使用 3 个 worker 进程来处理请求。
  • directory:你的 Flask 或 Django 应用所在的目录。
  • autostart=trueSupervisor 启动时会自动启动 Gunicorn
  • autorestart=true:如果 Gunicorn 进程崩溃,Supervisor 会自动重启它。
  • stderr_logfilestdout_logfile:指定标准错误和标准输出的日志文件路径,便于后续查看日志。
  • usergroup:指定运行进程的用户和用户组,确保进程以正确的权限运行。
  • environment:设置应用运行时的环境变量。

4. 启动 Supervisor 管理 Gunicorn

配置文件创建完成后,需要更新 Supervisor 配置并启动进程。执行以下命令:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp
  • reread:重新读取配置文件,加载新的配置。
  • update:更新进程列表,确保新配置生效。
  • start myapp:启动名为 myapp 的 Gunicorn 服务。

5. 检查 Gunicorn 服务状态

使用以下命令查看 Supervisor 管理的所有进程的状态:

sudo supervisorctl status

输出示例:

myapp                           RUNNING   pid 12345, uptime 1:23:45

这里,RUNNING 表示 Gunicorn 正在运行,pid 是进程 ID,uptime 是进程启动以来的运行时间。

6. 重启和停止 Gunicorn 服务

在应用更新或配置变更后,你可能需要重启 Gunicorn 服务。可以通过 Supervisor 执行重启操作:

sudo supervisorctl restart myapp

如果需要停止 Gunicorn 服务:

sudo supervisorctl stop myapp

7. 配置 Supervisor 开机自启

确保 Supervisor 服务在系统启动时自动启动。你可以使用以下命令在开机时启用 Supervisor

使用 systemd(适用于 Ubuntu 16 及以上版本)
sudo systemctl enable supervisor
sudo systemctl start supervisor
使用 init.d(适用于较老的 Linux 系统)
sudo update-rc.d supervisor defaults

这样,Supervisor 就会在系统启动时自动启动,进而启动 Gunicorn 进程。

8. 使用 Gunicorn 的平滑重启功能

Gunicorn 支持平滑重启(即无中断地重启 worker 进程),通常用于零停机的更新。如果你使用的是 Gunicorn 的 master-worker 模式,可以通过以下命令实现平滑重启:

gunicorn --workers 3 --bind 0.0.0.0:8000 --reload myapp:app

然而,Supervisor 本身并不直接支持平滑重启,因此,在生产环境中通常还是选择使用 restart 命令来重启服务。

9. 日志管理

Supervisor 配置中已经指定了标准输出和标准错误日志的路径(stderr_logfilestdout_logfile)。你可以通过以下命令查看日志:

tail -f /var/log/myapp.out.log
tail -f /var/log/myapp.err.log

这对于排查应用错误和调试非常有帮助。

10. 总结

通过结合使用 SupervisorGunicorn,你可以轻松管理 Python Web 应用的进程,确保应用在崩溃时能够自动重启,提高服务的稳定性和可用性。Supervisor 不仅可以监控进程,还能提供日志管理和开机自启等功能,使得部署和运维变得更加高效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】内存管理

【STM32】内存管理 文章目录 【STM32】内存管理1、内存管理简介疑问:为啥不用标准的 C 库自带的内存管理算法?2、分块式内存管理(掌握)分配方向分配原理释放原理分块内存管理 管理内存情况 3、内存管理使用(掌握&#…

DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

认知重构 | 自我分化 | 苏格拉底式提问

注:本文为 “认知重构 | 自我分化” 相关文章合辑。 心理学上有一个词叫:认知重构(改变 “非黑即白,一分为二” 的思维方式) 原创 心理师威叔 心理自救 2024 年 10 月 26 日 19:08 广东 你有没有过这样的时候&#x…

YARN的工作机制及特性总结

YARN hadoop的资源管理调度平台(集群)——为用户程序提供运算资源的管理和调度 用户程序:如用户开发的一个MR程序 YARN有两类节点(服务进程): 1. resourcemanager 主节点master ----只需要1个来工作 2. nod…

LLM2CLIP论文学习笔记:强大的语言模型解锁更丰富的视觉表征

1. 写在前面 今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS R ICHER V ISUAL R EPRESENTATION》, 2024年9月微软和同济大学的一篇paper, 是多模态领域的一篇工作,主要探索了如何将大模型融合到Clip模型里面来进一步提…

Win11更新系统c盘爆满处理

1.打开磁盘管理 2.右击c盘选择属性,进行磁盘管理,选择详细信息。 3.选择以前安装的文件删除即可释放c盘空间。

Spring面试题2

1、compareable和compactor区别 定义与包位置:Comparable是一个接口,位于java.lang包,需要类去实现接口;而Compactor是一个外部比较器,位于java.util包 用法:Comparable只需要实现int compareTo(T o) 方法,比较当前对…

2025年02月21日Github流行趋势

项目名称:source-sdk-2013 项目地址url:https://github.com/ValveSoftware/source-sdk-2013项目语言:C历史star数:7343今日star数:929项目维护者:JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…

Django check_password原理

check_password 是 Django 提供的一个用于密码校验的函数,它的工作原理是基于密码哈希算法的特性。 Django 的 make_password 函数在生成密码哈希时,会使用一个随机的 salt(盐值)。这个 salt 会与密码一起进行哈希运算&#xff0…

如何在 SpringBoot 项目创建并使用 Redis 的详细介绍

本文是博主整理项目时整理出来的,项目使用 SpringBoot 框架,使用 Redis 作为缓存组件,用于缓存部分热点接口数据。 文章目录 一、Redis 的前置配置1、引入依赖2、单机配置3、集群配置4、两种配置路径解读 二、创建 Redis 配置类1、简易版 Red…

快速入门——第三方组件element-ui

学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:10.第三方组件element-ui_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节 组件间的传值 组件可以有内部Data提供数据,也可由父组件通过prop方式传…

使用 Grafana 监控 Spring Boot 应用

随着软件开发领域的不断发展,监控和可观测性已成为确保系统可靠性和性能的关键实践。Grafana 是一个功能强大的开源工具,能够为来自各种来源的监控数据提供丰富的可视化功能。在本篇博客中,我们将探讨如何将 Grafana 与 Spring Boot 应用程序…

《深度学习》——RNN网络简单介绍

文章目录 RNN网络简介工作原理网络结构训练方法应用领域 RNN网络简介 循环神经网络(Recurrent Neural Network,RNN)是一种专门用于处理序列数据的神经网络,在自然语言处理、语音识别、时间序列预测等领域有广泛应用。 RNN 是一种…

深入解析JVM垃圾回收机制

1 引言 本节常见面试题 如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。如何判断一个常量是废弃常量如何判断一个类是无用的类垃圾收…

python网络安全怎么学 python做网络安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 众所周知,python是近几年比较火的语言之一,它具有简单易懂、免费开源、可移植、可扩展、丰富的第三方库函数等特点,Java需要大…

使用excel中的VBA合并多个excel文件

需求是这样的: 在Windows下,用excel文件让多个小组填写了统计信息,现在我需要把收集的多个文件汇总到一个文件中,前三行为标题可以忽略,第四行为收集信息的列名,处理每一行数据的时候,发现某一行…

【算法】2022年第十三届蓝桥杯大赛软件类省赛Java大学C组真题

个人主页:NiKo 算法专栏:算法设计与分析 目录 题目 2680:纸张尺寸 题目 2664:求和 题目 2681: 矩形拼接 题目 2665: 选数异或 题目 2682: GCD 题目 2667: 青蛙过河 题目 2683: 因数平方和 题目 2668: 最长不下降子序列 题目 2680:纸张尺寸 题目…

2025雅森北京展今天开幕,全景展现新能源汽车时代

推动汽车后市场全产业链向新向优转型升级 在2月21日举行的第36届中国国际汽车服务用品及设备展览会,中国国际新能源汽车技术、零部件及服务展览会(雅森北京展CIAACE)上,雅森国际总裁谢宇表示,当前正处在汽车行业新旧动…

PHP.INI的作用以及如何设置

php.ini是网站服务器上的一个重要配置文件,它包含了决定PHP运行环境特性的关键设置,直接关系到网站能否顺畅运行。每次 PHP 启动时,系统都会读取这个文件,加载相应的配置并将其应用到网站的脚本上。 尽管服务器通常预装了一些默认…

新版IDEA配置 Tomcat

配置tomcat 先检查自己的tomcat是否已经安装完成以及是否有其他问题,这里不对Tomcat方面的问题进行讲解。 新版IDEA需要在已有项目中添加Web部分的项目结构。 安装完成之后,打开要创建Web项目的项目(这里演示使用新建项目) 第一步,先给项…