Supervisor 进程管理

一、简介

supervisor 是一个Python开发的、通用的进程管理程序。当程序中断时,supervisor能自动重启它,不再需要程序员或系统管理员自己编写代码来控制。
supervisor要求管理程序是非daemon程序,supervisor会把程序转成daemon程序,因此若使用supervisor来管理进程,进程需要以非daemon的方式启动。
附上supervisor官网 点此链接进入官网

二、组件

  1. supervisord
    服务端,即管理服务端的所有进程,当supervisor启动后,服务端会启动一个supervisord进程,该进程负责管理配置文件中的所有的进程,可以说,只要在配置文件中的进程,都由supervisord管理,也可以说supervisord管理的进程都是它的子进程,并且当子进程出现崩溃时可以自动重启。
  2. supervisorctl
    客户端,即客户端的命名输入,也就是命令行管理工具,supervisorctl可以使用命令行来管理所有的子进程,并且可以启动/停止/重启子进程,获取running子进程的列表等等。supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,在本机上面是通过UNIX socket连接的,远程是通过TCP socket连接的。supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。
  3. Web Server
    Web Server组件可以在界面上管理进程,Web Server是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]板块里面。
  4. XML_RPC接口
    这是远程调用的,上面的supervisorctl和Web Server就是依赖于它。

三、安装与配置

本章基于阿里云服务器,Ubuntu20.04系统进行搭建。系统默认Python版本为Python 3.8.10,使用virtualenvs搭建的虚拟环境,名称为django
管理进程主要有Nginx代理和基于后端Django的uWSGI服务。

1. 安装

在Python默认的版本下进行安装,不安装在虚拟环境下,

pip3 install supervisor

2. 检查是否安装成功

输入以下命令,出现以下界面说明安装成功!

echo_supervisord_conf

在这里插入图片描述

3. 生成配置文件

在etc目录下生成supervisord_conf配置文件

echo_supervisord_conf > /etc/supervisord.conf

输入命令后可以进入/etc目录下,查看是否存在该文件,或者直接使用cat进行查看也行。
网上有的配置是将所有需要管理的进程都放在了supervisor.conf配置文件里面了,这里不推荐使用此方法,管理起来太过于繁琐,本章是将需要管理的进程服务分别放在了同一个目录下不同的.ini文件中,这样既能方便配置不同的需求也可以及时查看或更改配置的进程服务。

4. 创建子进程配置文件

在/ect目录下创建supervisord.d目录,并且进入该目录分别创建nginx.ini和uwsgi.ini子进程配置文件。

#创建supervisord.d目录
mkdir /etc/supervisord.d -p
#进入该目录下
cd supervisord.d 
#创建子进程配置文件
touch nginx.ini
touch uwsgi.ini

5. nginx子进程配置文件

vi nginx.ini

粘贴一下内容到nginx.ini配置文件中

[program:nginx]
#command为命令行,类似于linux的命令 
command=/usr/sbin/nginx -g 'daemon off;'
# 打开的目录,nginx的配置文件,即也可以是项目所在目录
directory=/etc/nginx
#如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置
autostart=true 
#这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退 出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启
autorestart=true
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了
startsecs=1
# 当进程启动失败后,最大尝试启动的次数。。当超过3次后,supervisor将把此进程的状态置为FAIL
stopwaitsecs=2#脚本运行的用户身份
user=root#日志输出
stderr_logfile=/home/kql/project/logs/blog_stderr.log
stdout_logfile=/home/kql/project/logs/blog_stdout.log#如果为true,则stderr的日志会被写入stdout日志文件中默认为false,非必须设置
redirect_stderr=true
#日志文件最大大小,和[supervisord]中定义的一样。默认为50
stdout_logfile_maxbytes = 20MB#stdout日志文件备份数
stdout_logfile_backups = 20

输入:wq保存退出!

这里有个坑,语法: daemon on | off
缺省值: on
Do not use the “daemon” and “master_process” directives in a production mode, these options are mainly used for development only. You can use daemon off
大意:在生产环境中 daemon 和 master_process 配置均不可使用,仅用于开发测试。为了方便开发测试 Nginx 的 daemon 参数默认值为 on。如果大家使用 Docker 看过 Nginx 镜像的 Dockerfile 你就明白这个,所以在配置nginx.ini文件中一定要加入daemon onoff

6. uWSGI子进程配置文件

其次配置uWSGI进程,uwsgi进程是运行在django虚拟环境下的,如果直接使用,是启动的不了的。从网上看到很多帖子,有的是直接在command命令行中直接写入uwsgi所在虚拟环境的具体目录下,本章使用了一个简单的方法可以直接调用它,即使用linux的软连接创建uwsgi快捷命令。
所以先创建uwsgi的软连接。我的uwsgi所在的目录在/root/.virtualenvs/django/bin/下,因此输入一下命令可以直接创建。

ln -s /root/.virtualenvs/django/bin/uwsgi /usr/local/bin/uwsgi 

之后进入supervisord.d目录下编辑uwsgi.ini即可。

vi uwsgi.ini

复制以下内容至uwsgi.ini配置文件下

[program:wsgi]
#前面的目录是uwsgi创建的软连接所在目录,当然,也可以不写,直接写入uwsgi也可以运行,--ini后面的目录是 是我的项目下的uwsgi.ini配置文件所在的路径。
command=/usr/local/bin/uwsgi --ini  /home/kql/project/backdjango/uwsgi.ini --die-on-term
#directory=/etc/nginx
autostart=true
autorestart=true
startsecs=1
stopwaitsecs=2
#脚本运行的用户身份
user=root#日志输出
stderr_logfile=/home/kql/project/logs/plantool_stdout.log
stdout_logfile=/home/kql/project/logs/plantool_err.log#把stderr重定向到stdout,默认为false
redirect_stderr=true
stdout_logfile_maxbytes = 20MB#stdout日志文件备份数
stdout_logfile_backups = 20

CPU使用率100%问题
在Linux里面看下进程

ps aux | less

发现占用cpu的是一堆uwsgi进程,uwsgi配置文件里processes填的是4
按道理最多只有4个uwsgi进程,但是这有十几个,每个占用率有百分之十几
网上说法:

python+supervisor+uwsgi跑web程序时出现uwsgi defunct进程的cpu达到100%问题
这个问题的原因是supervisor中进程退出,而重启进程时的处理有问题 详细情况可以看
https://github.com/unbit/uwsgi/issues/296
问题解决的办法是在uwsgi的配置文件中添加die-on-term = true参数 或者在命令行参数中添加–die-on-term参数

本人暂时加了这个参数,不确定有没有用
使用 kill -f uwsgi -9 命令
杀掉之前已经存在的uwsgi进程,一下子cpu占用率就下去了。

7. 更改supervisor.conf配置文件

进入/etc目录下修改supervisor.conf文件,
将以下代码更改为

;[include]
;files = relative/directory/*.ini
[include]
files = /etc/supervisord.d/*.ini

意思是管理的子进程配置文件所在的目录路径。*.ini意思是所有的.ini文件。

然后将以下代码取消注释,配置用户名、密码和端口号。

[inet_http_server]
#所有ip都可访问9001端口管理进程         
port=*:9001        
#web界面登入的用户名
username=admin
#web界面登入的密码
password=123123

保存输入:wq退出!

8.启动supervisor

使用以下命令启动supervisor

supervisord -c /etc/supervisord.conf

启动成功后可以使用以下命令来查看nginx和uwsgi是否启动成功

ps -ef | grep nginx
ps -ef | grep uwsgi
ps -ef | grep supervisord

9. supervisor常用命令

supervisorctl status	#查看所有子进程服务状态
supervisorctl restart	#重启所有子进程服务
supervisorctl restart name	#重启子进程名字为name的服务
supervisorctl start name	#开启子进程名字为name的服务
supervisorctl stop all	#关闭所有子进程服务
supervisorctl stop name	#停止子进程名字为name的服务
supervisorctl shutdown	#关闭所有子进程服务
supervisorctl reload	#重载配置文件,重启所有子进程服务
supervisorctl update	#更新所有服务,一般用在添加新服务后
supervisorctl update name	#更新子进程名字为name服务

启动成功后,记得去服务器开放9001端口,然后在浏览器中输入服务ip+9001 使用supervisor.conf里面配置的用户名跟密码登入使用即可。
出现界面如下,说明配置访问成功!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

电脑技巧:进程管理工具Process Explorer介绍

目录 1、介绍 2、常用功能介绍 2.1 替代微软自带的任务管理器 2.2 查看当前系统中运行的进程 2.3 查看进程的详细信息 2.4 检索进程 2.5 监控操作系统的性能指标 2.6 获取Dump文件 2.7 进程操作功能 今天给大家推荐一款非常强大的进程管理工具Process Explorer,感兴…

进程管理工具

目录 一、进程管理工具(Supervisor) 简介 二、Supervisor安装与配置 介绍Supervisor 一、进程管理工具(Supervisor) 简介 Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的…

QLoRA:量化 LLM 的高效微调

此 repo 支持论文“QLoRA:量化 LLM 的高效微调”,旨在使对 LLM 研究的访问民主化。 QLoRA 使用bitsandbytes进行量化,并与 Hugging Face 的PEFT和transformers库集成。QLoRA 由华盛顿大学 UW NLP 小组的成员开发。 概述 我们介绍了 QLoRA&…

访问学者申请中4个难点解析

近年来,越来越多的学者希望通过申请成为访问学者来扩展他们的研究领域和学术交流。然而,访问学者申请过程中存在一些难点,下面知识人网来解析其中的4个难点。 首先,第一个难点是选择适合的研究机构。访问学者需要仔细考虑自己的研…

Fiddler抓包工具之高级工具栏中的Inspectors的使用

高级工具栏中的Inspectors的使用 Inspectors 页签允许你用多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片,HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合http标准的请求和响应头。Cookies标签可以看到…

人才“选用育留”难?做好这步,人力资源或许比你想象的更轻松

人才作为企业生存和发展最重要的资源之一,如何发现、使用、培养、留住优秀人才是所有企业人力资源管理的关键。但在实际场景当中,“招聘流程长造成人才流失”、“员工招聘不精准、效率低”、“员工培育周期长、成本高”、“优秀人才留不住”等问题正深深…

win10系统怎么安装显卡驱动,驱动人生详细教程

驱动人生的用户跟小编咨询说,windows10系统要怎么安装显卡驱动?或者win10怎样安装网卡驱动、声卡驱动等等驱动程序 其实是很简单的,下面小编在这里给大家介绍一下用驱动人生安装显卡驱动的具体步骤 1、打开**驱动人生**选择设备管理器,然后…

驱动人生解决“检测到你的驱动版本比较低”的问题

有驱动人生用户反应在电脑上用模拟器玩阴阳师游戏的时候被提示“检测到你的驱动版本比较低”,造成这个情况可能是电脑驱动没有更新或电脑没有达到阴阳师游戏的最低配置,驱动人生建议按照以下方法解决。 一:驱动没有更新的解决方案 驱动没有…

电脑显卡驱动错误代码43怎么办?驱动人生解决方案

如果驱动人生8全面诊断提示显卡代码43,那就可能意味着这个显卡有质量问题。因为显卡代码43至少90%以上概率都是显卡物理性坏了。 如果你想解决显卡代码43问题,建议按照驱动人生的解决方案一个一个去尝试看看能不能解决。本文有点长,请耐心看…

驱动人生2014 v6.0.9.70 绿色版

驱动人生2014 v6.0.9.70 绿色版 软件大小:16.5MB 软件语言:简体中文 软件性质:常用软件 软件授权:绿色版 更新时间:2014-04-02 应用平台:/Win8/Win7/WinXP 驱动人生2014是一款电脑硬件驱动管理软件&a…

蓝牙规范系列--经典蓝牙概述(第一篇)

一、目的 从本篇开始介绍经典蓝牙的基础知识,内容较多故会分成多篇进行介绍。 经典蓝牙(BR/EBR)射频(物理层PHY)工作在免授权的2.4G ISM频段(2400 - 2483.5 MHz),使用跳频技术来对抗…

驱动人生8全新升级,开启2021全面时代

驱动人生8将在4月14日全新升级,开启全面时代! 驱动人生8此次更新将为游戏用户带来更加精准的解决方案。      不仅如此,更是将声卡等一系列电脑问题一网打尽,可谓是全球独有的解决方案! 驱动人生8新的全面诊断功能,可自动化…

驱动人生提供win11安装Google Play商店详细教程

据驱动人生消息道:微软目前已经开始在Win11的测试渠道推送安卓子系统,以让Win11兼容安卓App。 当前,Win11中安卓App的官方分发渠道是亚马逊应用商店,但用户也可以通过SideLoad侧载安卓APK。 但目前,开发者们又发现了…

电脑卡死、死机、黑屏怎么办?驱动人生教你如何解决

驱动人生收到一些用户留言,电脑卡屏死机黑屏怎么解决? 有人会遇到电脑经常死机,但是又是个电脑小白,处理起来就显得较为吃力。 对于卡屏死机,我们最常应对的方法便是“重启”! 但除此之外,我们还有什么其他办法能解…

如何零基础自学网络安全?

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解…

Pb协议的接口测试

【摘要】 Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标 XML ,支持自动编码,解码。比 XML 性能好,且数据易于解析。更多有关工具的介绍可参考…

nopi 缩小字体填充_我在超市里改字体

- 今天,2020年第一天,送篇字体教程给大家,让大家在学习中拥抱这新的一年,嗯,我们就是这么贴心呢! 这次主题是《我在超市改字体》,前段时间,我带工作室小伙伴们去楼下超市拍了一些产品包装上的图…

可扩展性与生态应用:Ardor公链AMA回顾

近日,Jelurida团队工程师Francisco Sarrias做客CryptoWallet.com,分享了一些有关Ardor的话题: Ardor是什么? Ardor是一个旨在提高区块链可扩展性的开源平台,这意味着该项目有助于使区块链网络运行更顺畅,用…

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

什么是压力测试?如何进行Jmeter压力测试

一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、…