Flask 线上服务如何使用 Supervisor 实现自动重启监控

文章导读
Flask 线上服务使用 Supervisor 实现自动重启监控的核心步骤包括安装 Supervisor 包、创建配置文件指定 Flask 启动命令及参数、设置 autorestart=true 确保异常退出后自动拉起。通过 supervisorctl 工具可实时管理进程状态,配合日志配置可追踪错误原因。该方案能将 Flask 进程守护为后台 daemon,解决服务崩溃需人工重启的问题,适合生产环
📋 目录
  1. A DeOldify 生产环境部署:supervisor 日志监控 + 自动重启 + 错误追踪实操-CSDN 博客
  2. B 实际应用 Supervisor 部署 Flask 项目
  3. C 管理进程实例
  4. D Supervisor 进程管理&开机自启_supervisor 开机自启动-CSDN 博客
  5. E 利用 supervisor 对服务进行管理
  6. F Supervisor 多进程管理 异常自动重启 可视化管理
  7. G FAQ
A A

Flask 线上服务使用 Supervisor 实现自动重启监控的核心步骤包括安装 Supervisor 包、创建配置文件指定 Flask 启动命令及参数、设置 autorestart=true 确保异常退出后自动拉起。通过 supervisorctl 工具可实时管理进程状态,配合日志配置可追踪错误原因。该方案能将 Flask 进程守护为后台 daemon,解决服务崩溃需人工重启的问题,适合生产环境长期稳定运行,同时支持集中化管理和 Web 界面监控,极大提升运维效率。

DeOldify 生产环境部署:supervisor 日志监控 + 自动重启 + 错误追踪实操-CSDN 博客

为什么需要生产级部署?普通部署容易崩溃,需要人工重启 缺乏日志监控,出了问题找不到原因 没有错误追踪,无法快速定位问题 手动管理效率低下,不适合长期运行 通过本文的方案,你将获得:✅ 自动故障恢复:服务崩溃后 30 秒内自动重启 ✅ 完整日志系统:记录所有操作和错误信息 ✅ 实时状态监控:随时查看服务健康状况 ✅ 简单管理命令:一行命令完成启动、停止、重启 2. 环境准备与快速部署 2.1 系统要求与依赖安装 首先确保你的系统满足以下要求:# 检查 Python 版本 python3 --version# 需要 Python 3.8+ # 检查 pip 版本 pip3 --version # 安装基础依赖 sudo apt update sudo apt install -y python3-pip python3-venv supervisor AI 写代码 bash 2.2 一键部署脚本 创建部署目录并设置环境:# 创建项目目录 mkdir-p ~/cv_unet_image-colorization cd~/cv_unet_image-colorization # 创建虚拟环境 python3 -m venv venv sourcevenv/bin/activate # 安装核心依赖 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu pip install modelscope flask gunicorn requests pillow AI 写代码 bash 2.3 Supervisor 配置 创建 Supervisor 配置文件:sudo nano /etc/supervisor/conf.d/cv-unet-colorization.conf AI 写代码 bash 写入以下配置内容:[program:cv-unet-colorization] directory=/root/cv_unet_image-colorization command=/root/cv_unet_image-colorization/venv/bin/gunicorn -w 2 -b 0.0.0.0:7860 app:app autostart=true autorestart=true startsecs=10 stopwaitsecs=30 user=root redirect_stderr=true stdout_logfile=/root/cv_unet_image-colorization/logs/app.log stderr_logfile=/root/cv_unet_image-colorization/logs/error.log environment=PYTHONPATH="/root/cv_unet_image-colorization",PYTHONUNBUFFERED="1"(2026 年 3 月 13 日的资料)

实际应用 Supervisor 部署 Flask 项目

1. 什么是 supervisor superviosr 是一个 Linux/Unix 系统上的进程监控工具,他/她 upervisor 是一个 Python 开发的通用的进程管理程序,可以管理和监控 Linux 上面的进程,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。不过同 daemontools 一样,它不能监控 daemon 进程。各个微服务的开发过程中,都是使用 Flask 自带的 server 来运行应用。在正式部署的时候,需要使用性能更好的专业 WSGI 容器来运行应用。所以选择 superviosr,在每个服务的 app 里已经添加了使用 gevent 的 WSGIServer 来运行应用的代码。2. 为什么用 supervisor 使用简单 supervisor 提供了一种统一的方式来 start、stop、monitor 你的进程,进程可以单独控制,也可以成组的控制。你可以在本地或者远程命令行或者 web 接口来配置 Supervisor。在 linux 下的很多程序通常都是一直运行着的,一般来说都需要自己编写一个能够实现进程 start/stop/restart/reload 功能的脚本,然后放到/etc/init.d/下面。但这样做也有很多弊端,第一我们要为每个程序编写一个类似脚本,第二,当这个进程挂掉的时候,linux 不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。而 supervisor 则可以完美的解决这些问题。supervisor 管理进程,就是通过 fork/exec 的方式把这些被管理的进程,当作 supervisor 的子进程来启动。这样的话,我们只要在 supervisor 的配置文件中,把要管理的进程的可执行文件的路径写进去就 OK 了。第二,被管理进程作为 supervisor 的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启,当然重启还是不重启,也要看你的配置文件里面有木有设置 autostart=true 了。supervisor 通过 INI 格式配置文件进行配置,很容易掌握,它为每个进程提供了很多配置选项,可以使你很容易的重启进程或者自动的轮转日志。集中管理 supervisor 管理的进程,进程组信息,全部都写在一个 ini 格式的文件里就 OK 了。而且,我们管理 supervisor 的时候的可以在本地进行管理,也可以远程管理,而且 supervisor 提供了一个 web 界面,我们可以在 web 界面上监控,管理进程。(消息于 2021 年 4 月 27 日发布)

管理进程实例

Supervisor 是进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。单纯的讲理论比较难懂,下面通过一个监控 flask 程序的实例来探究 文档:http://supervisord.org/index.html 安装 $ pip install supervisor 1 新建一个 flask 项目 新建 server.py 作为被监控的程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() 1 2 3 4 5 6 7 8 9 新建 log 文件夹用于存放日志 配置 新建文件夹 supervisor_demo,用来作为工作目录,并切换到该文件夹下 生成配置文件 $ echo_supervisord_conf > supervisord.conf 1 推荐线上使用默认路径:echo_supervisord_conf > /etc/supervisor/supervisord.conf 1 打开 supervisord.conf 文件,在最下面找到:;[include] ;files = relative/directory/*.ini 1 2 此处是需要监控程序的配置文件,修改为:[include] files = conf/*.ini ;需手动新建 conf 文件夹 1 2 新建文件 conf/server.ini,并打开编辑 (重点关注黑色字就行) ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program: myweb] command=python server.py ; 添加刚刚新建的 server.py 文件名 ;numprocs=1 ; 默认为 1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x ;directory=/home/python/tornado_server ; 执行 command 之前,先切换到工作目录 ;user=oxygen ; 使用 oxygen 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为 3 次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile =log/server.log ; 新建 log 文件夹 loglevel=info ;日志级别 1 2 3 4 5 6 7 8 9 10 11 12 13 启动 二选其一即可 $ supervisord # 不指定配置文件启动 $ supervisord -c supervisord.conf # 指定配置文件路径启动 1 2 查看是否启动 ps aux | grep supervisord 1 打开 log/server.log 看到已经打印出如下记录 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 1(截至 2022 年 5 月 30 日)

Supervisor 进程管理&开机自启_supervisor 开机自启动-CSDN 博客

文章介绍了如何使用 Supervisor 这个工具来管理和监控 Python 进程,如爬虫和 Flask 应用。详细步骤包括安装、配置、程序配置以及使用 supervisorctl 进行进程控制。还提到了配置参数如日志文件和开机自启设置,并提供了 Ubuntu 和 CentOS 的开机自启配置方法。supervisor 是一个进程管理工具,用来启动、停止、重启和监测进程。我用这个东西主要用来监测爬虫和 Flask 运行状况,当程序挂掉后,supervisor 能够帮我重新拉起进程。安装 安装就比较简单了,直接用 Python 的包管理器 pip: sudo pip install supervisor AI 写代码 配置 先通过 echo_supervisord_conf 命令生成配置文件,路径随你指定。echo_supervisord_conf>/etc/supervisord.conf AI 写代码 查看配置文件,常用配置说明:;supervisord.conf [unix_http_server] file=/tmp/supervisor.sock ; UNIX socket 文件,supervisorctl 会使用 ;chmod=0700; socket 文件的 mode,默认是 0700 ;chown=nobody:nogroup ; socket 文件的 owner,格式:uid:gid ;[inet_http_server] ; HTTP 服务器,提供 web 管理界面 ;port=127.0.0.1:9001; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性 ;username=user ; 登录管理后台的用户名 ;password=123; 登录管理后台的密码 [supervisord] logfile=/tmp/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log logfile_maxbytes=50MB ; 日志文件大小,超出会 rotate,默认 50MB logfile_backups=10; 日志文件保留备份数量默认 10 loglevel=info ; 日志级别,默认 info,其它:debug,warn,trace pidfile=/tmp/supervisord.pid ; pid 文件 nodaemon=false; 是否在前台启动,默认是 false,即以 daemon 的方式启动 minfds=1024; 可以打开的文件描述符的最小值,默认 1024 minprocs=200; 可以打开的进程数的最小值,默认 200 ; the belowsectionmust remaininthe configfileforRPC ; (supervisorctl/webinterface)towork, additional interfaces may be ; addedbydefining theminseparaterpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接 supervisord,路径与 unix_http_server 部分的 file 一致 ;serverurl=http://127.0.0.1:9001; 通过 HTTP 的方式连接 supervisord(2023 年 2 月 10 日)

Flask 线上服务如何使用 Supervisor 实现自动重启监控

利用 supervisor 对服务进行管理

本文介绍了如何使用 Supervisor 工具在 Linux 或 macOS 系统上监控和自动重启 Python Flask 服务。首先,解释了 Supervisor 的功能和限制,然后详细阐述了安装、配置及启动 Supervisor 的步骤,包括配置文件的关键参数设置。最后,讨论了 supervisord 与 supervisorctl 之间的关系,并提醒了配置文件错误可能导致的问题及解决方法。以 python 为例,当我们用 flask 发布一个服务时,希望这个服务可以一直运行,然而,服务可能会由于某些原因而挂掉。我希望有这样一种方法,可以监控这个服务的进程,如果挂掉,则自动重启。supervisor 就是一种很好的实现这种效果的工具。1、什么是 supervisor supervisor 的项目地址在这里,官方文档在这里。按照我的理解,supervisor 提供了一种监控功能:它能够时刻监视其所管理的服务的状态,如果状态出现异常,那么就可以按照预定的规则进行重启。需要注意的是,supervisor 只能在 Linux、macOS 等类 UNIX 系统上运行,在任何版本的 Windows 系统上都无法运行。2、supervisor 的安装与使用 安装:pip install supervisor cmd 1 安装完成后,执行以下命令以在特定位置生成配置文件:echo_supervisord_conf > /etc/supervisord.conf cmd 1(该信息的时间戳是 2021 年 3 月 8 日)

Supervisor 多进程管理 异常自动重启 可视化管理

Supervisor 是多进程管理工具,在 Docker 中相关联的进程能够通过 supervisor 来管理。微服务项目开发阶段,可用于微服务子项目的启动管理。支持 web 可视化管理,能够极大方面开发者对项目状态的监控和重启管理。二、安装与使用 (一) 安装与配置 1、服务安装 服务安装前,建议更新 Python 版本,使用较新的版本有利于服务拓展,若被管理的服务依赖于较新的 Python 版本,需要再次重新安装服务。代码语言:shell AI 代码解释 yuminstall-yepel-release yuminstall-ysupervisor 查看版本号 代码语言:java AI 代码解释 supervisord-v 2、配置文件 配置文件路径为/etc/supervisord.conf,其中用英文;表示注释。将配置文件备份,过滤注释配置后形成新的配置文件。代码语言:shell AI 代码解释 # 备份配置文件 mv/etc/supervisord.conf /etc/supervisord.example.conf# 保留非注释配置,初始化为新的配置文件 cat/etc/supervisord.example.conf|grep-v'^;'|tr-s"\n">/etc/supervisord.conf 使用命令 echo_supervisord_conf 查看默认配置 代码语言:text AI 代码解释 [unix_http_server] file=/var/run/supervisor/supervisor.sock ; 可视化 web 监控模块 (不需要直接注释) [inet_http_server] port=0.0.0.0:9001 username=root password=root [supervisord] logfile=/var/log/supervisor/supervisord.log ; 最大单个日志文件大小 logfile_maxbytes=50MB ; 最大日志文件保留份数 logfile_backups=10 loglevel=info pidfile=/var/run/supervisord.pid ; 如果将设置为系统服务,需要设置为 false nodaemon=false minfds=1024 minprocs=200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/run/supervisor/supervisor.sock ; 子进程配置存放目录 [include] files = supervisord.d/*.ini 通过如下命令查看版本号:代码语言:shell AI 代码解释 supervisord-v (二) 启动 1、后台启动 将 supervisord 设置成开机自启,保证委托其管理的服务能够正常启动,建议使用此方式启动。代码语言:shell AI 代码解释 # 设置开机自启 systemctlenablesupervisord# 启动主服务 systemctl start supervisord 2、前台启动 在编写 Docker 镜像,需要在一个镜像中同时管理多个服务,需要使用前台启动。supervisord 的默认启动方式是 daemon,若要配置为前台启动需修改配置文件/etc/supervisord.conf 中 nodaemon 属性值为 true。(来自 2022 年 2 月 7 日的资料)

FAQ

Supervisor 支持 Windows 系统吗?

Flask 线上服务如何使用 Supervisor 实现自动重启监控

不支持,Supervisor 只能在 Linux、macOS 等类 UNIX 系统上运行,在任何版本的 Windows 系统上都无法运行。

如何实现进程异常退出后自动重启?

在配置文件中设置 autorestart=true,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息并进行自动重启。

如何查看 Supervisor 管理的进程状态?

Flask 线上服务如何使用 Supervisor 实现自动重启监控

可以使用 supervisorctl 工具进行进程控制,也可以通过 Web 界面监控,管理进程,配置文件里设置 inet_http_server 端口即可。

日志文件如何配置?

在配置文件中设置 stdout_logfile 和 stderr_logfile 路径,支持按大小/时间切割,logfile_maxbytes 设置最大文件大小。