以python为例,当我们用flask发布一个服务时,希望这个服务可以一直运行,然而,服务可能会由于某些原因而挂掉。我希望有这样一种方法,可以监控这个服务的进程,如果挂掉,则自动重启。

supervisor就是一种很好的实现这种效果的工具。

1、什么是supervisor

supervisor的项目地址在这里,官方文档在这里。按照我的理解,supervisor提供了一种监控功能:它能够时刻监视其所管理的服务的状态,如果状态出现异常,那么就可以按照预定的规则进行重启。

需要注意的是,supervisor只能在Linux、macOS等类UNIX系统上运行,在任何版本的Windows系统上都无法运行。

2、supervisor的安装与使用

安装:

pip install supervisor

安装完成后,执行以下命令以在特定位置生成配置文件:

echo_supervisord_conf > /etc/supervisord.conf

注意,上述命令需要拥有root权限才可以运行;如果没有root权限,参考这里进行解决。

⚠️ 2021年4月29日补充:
上述echo_supervisord_conf命令在某些情况下可能并不能在任何目录都起作用,这时可以切换到supervisor的安装目录下执行上述命令(通过pip show supervisor打印的Location字段的值获取安装位置)。

通过配置文件,可以向supervisor添加需要管理的程序以及管理方式。配置文件的格式与python中ConfigParser解析的文件格式相同,由section以及key-value对组成。配置文件中可设置的内容很多,这里只挑其中关键的一部分进行说明:

[unix_http_server]
; supervisor从这里指定的套接字来监听HTTP请求
file=/python-projects/supervisor-gunicorn-flask/supervisor/supervisor.sock[supervisord]
; 记录supervisord程序活动日志的文件
logfile=/python-projects/supervisor-gunicorn-flask/supervisor/supervisord.log
; 最大的日志文件大小
logfile_maxbytes=50MB
; 超过日志最大容量,将会备份,这里控制备份日志的数量
logfile_backups=10
; 日志等级
loglevel=info
; supervisord程序的进程号
pidfile=/python-projects/supervisor-gunicorn-flask/supervisor/supervisord.pid
; 设置为守护进程
nodaemon=false
; 控制要不要将日志打印到标准输出
silent=false[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]
; 用于访问supervisord服务以对其进行管理的套接字
serverurl=unix:///python-projects/supervisor-gunicorn-flask/supervisor/supervisor.sock[program:gunicorn]
; 启动程序的命令
command=gunicorn -w 4 -b 0.0.0.0:5000 my_app:app
; 脚本的位置,在这个例子中,就是my_app.py的位置
directory=/python-projects/supervisor-gunicorn-flask
; 是否在启动supervisord的时候启动程序
autostart=true
; 当supervisord程序启动后,等待多少秒后才启动目标程序。这个参数在目标程序重启时仍有效。
startsecs=1
; 当管理的程序终止时是否自动重新启动
autorestart=true
; 标准输出日志的位置,目录必须事先创建,文件不必创建
stdout_logfile=/python-projects/supervisor-gunicorn-flask/logs/stdout.log
; 标准错误日志的位置,目录必须事先创建,文件不必创建
stderr_logfile=/python-projects/supervisor-gunicorn-flask/logs/stderr.log

配置完上述参数后,运行以下命令进行启动:

supervisord -c /etc/supervisord.conf

⚠️2021年4月29日更新:
如果想要通过gunicorn的配置文件启动,可以将上述command的值设置成gunicorn -c gunicorn_cfg.py my_app:app,然后在gunicorn_cfg.py中配置相关信息。如果使用这种方法,注意不要将gunicorn配置为守护进程,这将导致supervisor失效:虽然可以启动服务,但在服务异常终止时无法重启,暂时不明白为什么会这样。

3、supervisorctlsupervisord的关系

supervisord是直接管理目标程序的,而supervisorctl则是管理supervisord的。它们共用一个配置文件,即上一部分提到的/etc/supervisord.conf文件。

说明:supervisord.conf文件配置不合法时,会导致supervisorctl命令失效。
我遇到一个情况,即使修改了配置文件为合法的,也无法使supervisorctl命令有效,最后的解决方案是,将supervisord服务停止,删除配置文件,然后重新生成并修改配置。

利用supervisor对服务进行管理相关推荐

  1. Supervisor 为服务创建守护进程

    今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...

  2. 呼叫中心的服务水平管理

    对企业来讲,呼叫中心是企业的窗口,呼叫中心为客户提供服务,是企业提升品牌形象.建立客户忠诚度的最佳通道.因此,呼叫中心的服务水平对于企业来说意义重大,相应的服务水平管理更是企业必不可少的管理之一. & ...

  3. [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  4. 第5章-商品服务-品牌管理

    第5章 商品服务-品牌管理 文章目录 第5章 商品服务-品牌管理 1. 使用逆向工程的代码 1.1 导入代码 1.2 显示状态优化 2. 文件上传技术 2.1 阿里云---对象存储OSS 云存储开启 ...

  5. 网络商品交易及有关服务行为管理暂行办法(转)

    中新网4月2日电 据国务院法制办公室网站消息,为促进网络经济的健康发展,保护消费者和经营者合法权益,国家工商行政管理总局研究起草了<网络商品交易及有关服务行为管理暂行办法(征求意见稿)>, ...

  6. linux进程管理工具supervisor安装卸载、子配置文件详解、遇到的问题、supervisor group群组管理、启动一个springboot项目示例、update命令注意点

    简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

  7. 利用ogg微服务版将oracle同步到kafka

    ogg微服务版可以再界面上配置抽取.复制进程,不必进入到shell中进行配置,并且图形化界面可以看到更多信息. 系统架构 源端安装ogg for oracle 19C , 目标端安装ogg for b ...

  8. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

  9. 利用Messager信使服务在局域网内发信息

    利用Messager信使服务在局域网内发信息在局域网中,我们常常想将一些消息告诉在附近房间的人,除了跑过去说或打电话外,一般情况下,我们都使用QQ类软件,或发电子邮件.但两者都有缺点,电子邮件不是实时 ...

最新文章

  1. AVR开发 Arduino方法(附四) 参考文献与网址
  2. iOS Sprite Kit教程之使用帮助文档以及调试程序
  3. 9、创建索引(CREATE INDEX)
  4. 9-[记录操作]--数据的增删改,权限管理
  5. mysql执行语句后回退_MySQL命令学习笔记(八)
  6. 升级步骤linux_开发人员福音,在win10系统上安装linux子系统
  7. centos7 安装sql_在Linux Distribution CentOS 7上安装SQL Server vNext CTP
  8. 以太网交换芯片行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. pcl之将QVTKWidget添加到QtCreator
  10. 阿里面试官:LongAdder和AtomicLong哪个性能更好?我有点懵~
  11. 四元数与欧拉角的转换与使用matlab的simulink搭建实现
  12. SYD8811/SYD8810 一拖一离线批量烧录板(FD1201)使用说明
  13. FTM的PWM、输入捕获、正交解码
  14. window11 网络突然就用不了,系统更新网络就用不了了,DNS服务器可能不可用
  15. 除了迅雷,目前还有什么下载软件好用?以下这3款你听过吗?
  16. 使用Python计算离散随机变量的熵(Entropy)
  17. VolumeDeform: Real-time Volumetric Non-rigid Reconstruction 笔记
  18. Android 下载和更新APK
  19. js实现日期显示的一些操作
  20. 常见的自动化运维工具介绍及特点、安装ansible

热门文章

  1. 刷机大师独家支持android,刷机大师旗下产品ROOT大师支持ROOT手机汇总
  2. Vue中常用的提示信息:
  3. 什么是软件测试,软件测试究竟是做什么的
  4. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章
  5. 继承(extends)
  6. torch.meshgrid 使用探究
  7. 常见Linux系统下载站
  8. 大数据应用要经得起考验,不可盲目跟风_光点科技
  9. (C++)“韩信点兵”问题的求解方法
  10. 笔记本安装固态涉及到的注意事项