利用supervisor对服务进行管理
以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、supervisorctl
与supervisord
的关系
supervisord
是直接管理目标程序的,而supervisorctl
则是管理supervisord
的。它们共用一个配置文件,即上一部分提到的/etc/supervisord.conf
文件。
说明:
supervisord.conf
文件配置不合法时,会导致supervisorctl
命令失效。
我遇到一个情况,即使修改了配置文件为合法的,也无法使supervisorctl
命令有效,最后的解决方案是,将supervisord
服务停止,删除配置文件,然后重新生成并修改配置。
利用supervisor对服务进行管理相关推荐
- Supervisor 为服务创建守护进程
今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...
- 呼叫中心的服务水平管理
对企业来讲,呼叫中心是企业的窗口,呼叫中心为客户提供服务,是企业提升品牌形象.建立客户忠诚度的最佳通道.因此,呼叫中心的服务水平对于企业来说意义重大,相应的服务水平管理更是企业必不可少的管理之一. & ...
- [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 第5章-商品服务-品牌管理
第5章 商品服务-品牌管理 文章目录 第5章 商品服务-品牌管理 1. 使用逆向工程的代码 1.1 导入代码 1.2 显示状态优化 2. 文件上传技术 2.1 阿里云---对象存储OSS 云存储开启 ...
- 网络商品交易及有关服务行为管理暂行办法(转)
中新网4月2日电 据国务院法制办公室网站消息,为促进网络经济的健康发展,保护消费者和经营者合法权益,国家工商行政管理总局研究起草了<网络商品交易及有关服务行为管理暂行办法(征求意见稿)>, ...
- linux进程管理工具supervisor安装卸载、子配置文件详解、遇到的问题、supervisor group群组管理、启动一个springboot项目示例、update命令注意点
简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...
- 利用ogg微服务版将oracle同步到kafka
ogg微服务版可以再界面上配置抽取.复制进程,不必进入到shell中进行配置,并且图形化界面可以看到更多信息. 系统架构 源端安装ogg for oracle 19C , 目标端安装ogg for b ...
- 适用于Java开发人员的微服务:管理安全性和机密
关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...
- 利用Messager信使服务在局域网内发信息
利用Messager信使服务在局域网内发信息在局域网中,我们常常想将一些消息告诉在附近房间的人,除了跑过去说或打电话外,一般情况下,我们都使用QQ类软件,或发电子邮件.但两者都有缺点,电子邮件不是实时 ...
最新文章
- AVR开发 Arduino方法(附四) 参考文献与网址
- iOS Sprite Kit教程之使用帮助文档以及调试程序
- 9、创建索引(CREATE INDEX)
- 9-[记录操作]--数据的增删改,权限管理
- mysql执行语句后回退_MySQL命令学习笔记(八)
- 升级步骤linux_开发人员福音,在win10系统上安装linux子系统
- centos7 安装sql_在Linux Distribution CentOS 7上安装SQL Server vNext CTP
- 以太网交换芯片行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- pcl之将QVTKWidget添加到QtCreator
- 阿里面试官:LongAdder和AtomicLong哪个性能更好?我有点懵~
- 四元数与欧拉角的转换与使用matlab的simulink搭建实现
- SYD8811/SYD8810 一拖一离线批量烧录板(FD1201)使用说明
- FTM的PWM、输入捕获、正交解码
- window11 网络突然就用不了,系统更新网络就用不了了,DNS服务器可能不可用
- 除了迅雷,目前还有什么下载软件好用?以下这3款你听过吗?
- 使用Python计算离散随机变量的熵(Entropy)
- VolumeDeform: Real-time Volumetric Non-rigid Reconstruction 笔记
- Android 下载和更新APK
- js实现日期显示的一些操作
- 常见的自动化运维工具介绍及特点、安装ansible