位置: 编程技术 - 正文

基于Python 的进程管理工具supervisor使用指南(基于python的研究)

编辑:rootadmin

推荐整理分享基于Python 的进程管理工具supervisor使用指南(基于python的研究),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:基于python的进销存管理系统,利用python进行,利用python进行,基于python的研究,基于python语言,利用python进行,基于python的算法,基于python语言,内容如对您有帮助,希望把文章链接给更多的朋友!

Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上。Supervisor 官方版目前只能运行在 Python 2.4 以上版本,但是还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k。

什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序。

除此之外,Supervisor 还能很友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中,还能按文件大小对日志进行分割。

Supervisor 有两个主要的组成部分:

supervisord,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。 supervisorctl,是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。

安装

sudo pip install supervisor

创建配置文件

echo_supervisord_conf > /etc/supervisord.conf

如果出现没有权限的问题,可以使用这条命令

sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf"

配置文件说明

想要了解怎么配置需要管理的进程,只要打开 supervisord.conf 就可以了,里面有很详细的注释信息。

打开配置文件

vim /etc/supervisord.conf

默认的配置文件是下面这样的,但是这里有个坑需要注意,supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录下,但是 /tmp 目录是存放临时文件,里面的文件是会被 Linux 系统删除的,一旦这些文件丢失,就无法再通过 supervisorctl 来执行 restart 和 stop 命令了,将只会得到 不存在的错误 。

默认情况下,进程的日志文件达到MB时,将进行分割,最多保留个文件,当然这些配置也可以对每个进程单独配置。

权限问题

设置好配置文件后,应先创建上述配置文件中新增的文件夹。如果指定了启动用户 user,这里以 oxygen 为例,那么应注意相关文件的权限问题,包括日志文件,否则会出现没有权限的错误。例如设置了启动用户 oxygen,然后启动 supervisord 出现错误

Error: Cannot open an HTTP server: socket.error reported errno.EACCES ()

就是由于上面的配置文件中 /var/run 文件夹,没有授予启动 supervisord 的用户 oxygen 的写权限。/var/run 文件夹实际上是链接到 /run,因此我们修改 /run 的权限。

sudo chmod /run

这样有点简单粗暴,也可以考虑把上述配置文件中 .sock,.pid 等文件修改到其他文件夹中,并确保有相应的权限即可。一般情况下,我们可以用 root 用户启动 supervisord 进程,然后在其所管理的进程中,再具体指定需要以那个用户启动这些进程。

使用浏览器来管理

supervisor 同时提供了通过浏览器来管理进程的方法,只需要注释掉如下几行就可以了。

使用 include

在配置文件的最后,有一个 [include] 的配置项,跟 Nginx 一样,可以 include 某个文件夹下的所有配置文件,这样我们就可以为每个进程或相关的几个进程的配置单独写成一个文件。

基于Python 的进程管理工具supervisor使用指南(基于python的研究)

进程的配置样例

一个简单的例子如下

设置日志级别

loglevel 指定了日志的级别,用 Python 的 print 语句输出的日志是不会被记录到日志文件中的,需要搭配 Python 的 logging 模块来输出有指定级别的日志。

多个进程

按照官方文档的定义,一个 [program:x] 实际上是表示一组相同特征或同类的进程组,也就是说一个 [program:x] 可以启动多个进程。这组进程的成员是通过 numprocs 和 process_name 这两个参数来确定的,这句话什么意思呢,我们来看这个例子。

上面这个例子会启动两个进程,process_name 分别为 foo:foo_ 和 foo:foo_。通过这样一种方式,就可以用一个 [program:x] 配置项,来启动一组非常类似的进程。

再介绍两个配置项 stopasgroup 和 killasgroup

; 默认为 false,如果设置为 true,当进程收到 stop 信号时,会自动将该信号发给该进程的子进程。如果这个配置项为 true,那么也隐含 killasgroup 为 true。例如在 Debug 模式使用 Flask 时,Flask 不会将接收到的 stop 信号也传递给它的子进程,因此就需要设置这个配置项。

更详细的配置例子,可以参考如下,官方文档在这里

将多个进程按组管理

Supervisor 同时还提供了另外一种进程组的管理方式,通过这种方式,可以使用 supervisorctl 命令来管理一组进程。跟 [program:x] 的进程组不同的是,这里的进程是一个个的 [program:x] 。

当添加了上述配置后,progname1 和 progname2 的进程名就会变成 thegroupname:progname1 和 thegroupname:progname2 以后就要用这个名字来管理进程了,而不是之前的 progname1。

以后执行 supervisorctl stop thegroupname: 就能同时结束 progname1 和 progname2,执行 supervisorctl stop thegroupname:progname1 就能结束 progname1。supervisorctl 的命令我们稍后介绍。

启动 supervisord

执行 supervisord 命令,将会启动 supervisord 进程,同时我们在配置文件中设置的进程也会相应启动。

更多参数请参考文档

supervisorctl 命令介绍

注意:显示用 stop 停止掉的进程,用 reload 或者 update 都不会自动重启。也可以参考这里

开机自动启动 Supervisord

Supervisord 默认情况下并没有被安装成服务,它本身也是一个进程。官方已经给出了脚本可以将 Supervisord 安装成服务,可以参考这里查看各种操作系统的安装脚本,但是我用官方这里给的 Ubuntu 脚本却无法运行。

安装方法可以参考 serverfault 上的回答。

比如我是 Ubuntu 系统,可以这么安装,这里选择了另外一个脚本

注意:这个脚本下载下来后,还需检查一下与我们的配置是否相符合,比如默认的配置文件路径,pid 文件路径等,如果存在不同则需要进行一些修改。

其实还有一个简单的方法,因为 Linux 在启动的时候会执行 /etc/rc.local 里面的脚本,所以只要在这里添加执行命令就可以

以上内容需要添加在 exit 命令前,而且由于在执行 rc.local 脚本时,PATH 环境变量未全部初始化,因此命令需要使用绝对路径。

在添加前,先在终端测试一下命令是否能正常执行,如果找不到 supervisord,可以用如下命令找到

sudo find / -name supervisord

Python自动化运维和部署项目工具Fabric使用实例 Fabric是使用Python开发的一个自动化运维和部署项目的一个好工具,可以通过SSH的方式与远程服务器进行自动化交互,例如将本地文件传到服务器,在服

python解决Fedora解压zip时中文乱码的方法 前言很多时候在windows下压缩文件没问题,但是到了Linux下,出现乱码,很常见。以前在Ubuntu下,用`unzip-OGBKfilename.zip`就可以搞定。换了Fedora后,暂时没

Python提取网页中超链接的方法 下面是最简单的实现方法,先将目标网页抓回来,然后通过正则匹配a标签中的href属性来获得超链接代码如下:importurllib2importreurl='

标签: 基于python的研究

本文链接地址:https://www.jiuchutong.com/biancheng/385357.html 转载请保留说明!

上一篇:打包发布Python模块的方法详解(python项目打包发布)

下一篇:Python自动化运维和部署项目工具Fabric使用实例(python自动化运维教程)

  • 公司有残疾人如何进行增值税减免备案
  • 成本核算需要哪些基础工作
  • 房租押金没退款怎么起诉
  • 一次性年金怎么计算
  • 一般纳税人开红票怎么处理
  • 购买商标权发生损失能税前扣除吗?
  • 固定资产清理增加记哪一方
  • 收到对方的银行汇票算什么凭证
  • 进口产品再销售如何缴税
  • 施工费可以开13个点吗
  • 个人名义去税务局开票
  • 发票章盖住备注烂备注的日期,看不清
  • 收到个税返还手续费怎么开发票
  • 审计调整以前年度投资收益怎么处理
  • 支付商业保险费属于什么现金流量项目
  • w11系统激活码
  • perl.exe是什么程序?
  • 邮件远程控制
  • 收到银行退回余款
  • 应付票据抵付应付账款
  • 口腔发炎怎么办最快最有效的方法
  • vue 页面生成pdf
  • php单例模式例子
  • 讲解如何使用
  • 最贵的苹果平板
  • 劳务费用 税
  • 工资总额提取福利费
  • 小企业会计准则和一般企业会计准则的区别
  • 前端调用后端代码
  • 私企固定资产管理办法
  • Vue3【Transition(效果、CSS 过渡、使用animation、TransitionGroup、 KeepAlive、Teleport )】(七)-全面详解(学习总结---从入门到深化)
  • php-fpm运行模式
  • php调用微信扫描二维码
  • 跟郑老师学会计建筑业账务处理
  • 英文描述什么是利润表
  • 工程公司项目管理部管理制度
  • 其他权益工具投资是金融资产吗
  • 帝国cms专题
  • python搞自动化
  • 经营范围技术服务技术开发技术咨询技术交流
  • 现金流量表里包括应收票据吗
  • 酒店打印要钱吗
  • 增值税发票有哪些项目
  • 数据库关键字有哪些
  • 建筑劳务公司何去何从
  • 验资费如何做账务处理
  • 车船税不开发票怎么做账?
  • 收到境外支付的咨询费免税吗
  • 坏账准备贷方余额期末如何处理
  • 结转完期间损益是不是可以结账了
  • 同花顺为什么有钱没法买
  • 所税税汇算补交怎么算
  • 营改增后建筑行业增值税税率
  • sql四种功能
  • 安全升级
  • sql server数据库怎么使用
  • QQPCTray.exe是什么进程 QQPCTray.exe文件介绍
  • VirtualBox虚拟机免费
  • 电脑重装系统步奏
  • windows不认u盘
  • xp系统的搜索
  • mac运行很卡怎么办
  • cpqinet.exe是什么进程 安全吗 cpqinet进程安全性评估
  • PureVoice.exe - PureVoice是什么进程 有什么用
  • win10系统如何更改盘符
  • win7任务栏变小图标
  • 日历功能在哪里设置
  • windows8飞行模式怎么关
  • Win10怎么添加游戏
  • VS2012中C++,#include无法打开源文件
  • 两个js文件互相取变量
  • jquery验证
  • cocos2dx quick lua 学习笔记1
  • Unity3D之Vector3.Dot和Vector3.Cross的使用
  • Android studio DrawerLayout
  • python获取当前日期的前一天
  • python解决方案与程序有什么不同
  • bootstrap怎么用
  • html仿淘宝
  • 乌鲁木齐税收政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设