Python supervisor强大的进程管理工具的使用

本文主要跟大家分享在类unix操作系统下supervisor的使用以及一些关于进程的知识

一、问题背景

1、背景

如何才能让一个进程摆脱终端,获得相对较长的生命周期?

2、后台(守护)、前台进程

​什么是守护进程?通俗点讲就是后台跑着的进程,不会因为你关了终端服务就会随之停止,直到你把计算机的电源关闭。当进程变为后台进程后,同一个终端就会释放了,你可以在其中干别的事情,而不会干扰到你跑的服务。后台进程一般来说不能捕捉输入,服务的输出依然可以选择在终端输出。

同样的道理,理解前台进程就简单多了,前台进程就是你的一个服务在跑,但是不能再在同一个终端干别的事情,必须把你现有的服务给停掉之后才可以继续干别的事,前台进程可以捕捉输入、输出。

3、如何将前台进程启动为后台进程

用过Python Django进行过开发的朋友一定会在自己本地的环境中跑过项目。如下图,这样跑起来的服务,我们通常称为前台进程,这个时候在此终端,你不能干别的事,当然这么做一般都是用来看打印在终端的调试信息,但是在远程服务器上呢?情况就不一样了吧。

下面是用Python bottle写的一个最简单的web应用(bottle-轻量级框架,感兴趣的朋友可以去了解,pip install bottle可以安装)

进入终端

vim server.py

from bottle import route, run

@route("/")
def printStr():
  return "hello world"

run(host="localhost", port=8090, debug=True)

在终端下,把应用跑起来

$ python server.py

出现上图所示,访问http://localhost:8090/,浏览器就出现"hello world",这时,ctrl+c后在访问就会报错了。下面演示如何将该进程启动为后台进程

(1)依然可以在终端输出的后台进程,就在命令行后加上&符号,依然可访问

$ python server.py &

可以看到终端依然捕捉到输出

​  

(2) 使用nohup命令结合&符号,该命令会在当前目录下生成nohup.out文件,此文件保存着本该终端打印出来的信息,如下图所示

$ nohup python server.py &

4、如何辨别后台进程

上面乱搞一通就变成了后台进程?别急,我们通过ps命令看一下

$ ps aux


TT列为??的为后台进程,没有得就是前台进程,前台进程还有个明显的标记就是有个''+"号

5、存在的问题

上述启动为后台进程的方法,其实是存在很多问题的。

(1)从项目的角度看,一个项目往往不止起一个进程,还可能有其他的进程,那么,如何进行统一的进程管理呢?

(2)在进程运行的过程中,因为某种原因,挂掉了,如何做到不用人为干预自动重启进程呢?

supervisor完美解决上面的两个问题,当然可能还有更为强大的功能。

二、什么是supervisor

1、定义

Supervisor是用Python编写的目前只能在类unix操作系统中使用的一个进程管理工具。

注意,是一个管理工具,并不是库或包。

2、作用

Supervisor进程管理工具可以高效简单地对单个或者多个进程进行统一管理,如启动、重启、停止进程。更重要的作用是能在进程因为某种原因崩溃时,做到自动重启

3、Supervisor的组成

Supervisor主要由以下两部分组成:

(1)supervisord:

当我们启动Supervisor时,首先会有一个supervisord进程,称为父进程,它所管理的进程是它的子进程。supervisord进程负责统一管理这些子进程的启动、重启、停止。某种角度上看,有点NGINX的master与worker的感觉吧。

(2)supervisorctl:

一个命令行管理工具,输入某些命令,如:start、stop、restart等,就可以对指定的进程进行相应的操作了,极其简单。

如何简单地理解?

可以将supervisord理解为服务器,supervisorctl理解为客户端,输入的一些命令可以看做是客户端与服务器的交互过程。更牛逼的是Supervisor提供了web api在浏览器上就可以直接进行对进程的可视化管理。

接下来,在使用Supervisor进程管理工具前,先来看看一些配置项,当然安装好Supervisor之后,它的配置文件里已经有很详细的注释了,这里主要介绍子进程的配置文件的配置参数。下图就是三个子进程的配置文件,为什么要拿子进程的配置出来,形成一个独立的配置文件呢?当然是为了维护方便,就像很多人用NGINX一样,把配置文件按模块进行管理

子进程配置文件的示例

​  

常用配置参数说明:

配置项 说明
directory 就是你项目所在的位置,supervisord会自动切换到这个目录
command 你跑项目的命令
user 你用什么身份起进程
autostart 当设置为true时,当supervisord启动时,该子进程就会自动启动
autorestart 当设置为true时,子进程因为某种原因挂掉,会自动进行重启
startsecs 该子进程启动多久后,才认为进程启动成功
startretries 子进程尝试情动的次数,默认为3
redirect_stderr 当设置为true时,子进程的标准错误输出重定向到supervisord后台的标准输出文件描述符
stdout_logfile 子进程标准输出存放的路径
stdout_logfile_maxbytes 标准输出文件达到多少后进行轮转
stdout_logfile_backups 标准输出日志的备份数量
priority 子进程启动的优先级,值越小启动越早

接下来,就是怎么用Supervisor的问题了

三、如何使用supervisor

1、安装Supervisor

两种方式进行安装

$ brew install supervisor #(本人机子是MAC,其他类unix操作系统的发行版本,自行使用相应的软件管理命令)
$ pip install supervisor

注意:supervisor只运行在python2.4以上的版本,但是不支持Python3.X,如果你的机子没有相应的版本就Google一下解决办法吧

安装完成之后,我的是默认的安装路径

$ cd /usr/local/etc/


​ 

上图所示的supervisord.ini文件就是安装后产生的文件,supervisor.d是我自己自自建的文件夹,这个待会说。

linux操作系统的是安装路径

我们先来看看supervisord.ini是什么?

2、编辑配置文件

$ cat -n supervisord.ini

可以看到大概有148行,有9个配置选项


上图中画红色横线的地方要注意,有些人的supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录下,这个目录是放临时文件的,容易丢失,强烈建议改目录放置,建议放在/var/run/下。

别看这supervisord.ini配置文件一大推东西,其实真正需要配的地方很少,本人就只是选用了第二个框的配置项,这里还提一下【include】配置项,跟NGNIX的配置文件如出一辙,意思是:我这里配置文件还包含了这个目录下的所有配置文件。还记得上本提到的supervisor.d目录吗?里面可以放置很多**.ini文件,而这些.ini**的文件其实很简单,仅仅包含了上图中的第六个配置项,这样就达到一个子进程一个配置文件,方便进行维护的目的。

$ ls supervisor.d/

$ vim server2.py


​ 

上图的红框的内容,其实就是主配置文件中的第六个框的配置项,只是把它抽出来,形成独立的配置文件,达到分而治之的目的。

以上就配置好了两个子进程,接下来就是跑起来了

3、启动supercisord

$ supervisord -c /usr/loacl/etc/supervisord.ini #注意:要以配置文件的方式开启服务


上图的现象是因为我已经启动了supervisord进程,下面通过supervisorctl命令行工具进行进程管理

4、使用supervisorctl进行进程管理

进入supervisorctl交互界面,也要以带有配置文件的方式进入,这样才会跟踪到配置

$ supervisorctl -c /usr/local/etc/supervisord.ini 

​  

上图的现象是因为我把代码切换到了一个正在开发的分支上

supervisor> help #查看命令

于是乎,可以根据命令自由地对子进程进行管理。

下表是一些常用的命令:

常用的命令 说明
status 查看当前管理的子进程
reload 当配置发生改变时,进行热部署
restart [program_name] 重启某个子进程
start [program_name] 启动某个子进程

5、可以通过web页面进行进程可视化进程管理

使用浏览器访问127.0.0.1:9001,进入管理可视化界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python进程管理工具supervisor使用实例

    平时我们写个脚本,要放到后台执行去,我们怎么做呢? 复制代码 代码如下: nohup python example.py 2>&1 /dev/null & 用tumx或者screen? 但是用着可能都不爽,今天就看看python里面的一个进程管理工具supervisor: 官方说:Supervisor: A Process Control System 说白了他就是一个demon程序,他来帮助我们完成对我们想要托管的脚本也好程序也好,好好的照料: 1.安装 python的东西就是好安

  • 基于Python 的进程管理工具supervisor使用指南

    Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2.4 以上版本,但是还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k. 什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序. 除此之

  • python进程管理工具supervisor的安装与使用教程

    前言 在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便.如果有一个工具能够实现每台机器上多个进程的简单高效中心化管理将是非常方便的.于是Supervisord工具应运而生.与Supervisord类似的工具包括monit, daemontools和runit.下面话不多说了,来一起看看详细的介绍吧. 安装 Supervisord是运行在Python环境下的服务监控程序,所以在安装supervisord之前必须

  • Python supervisor强大的进程管理工具的使用

    本文主要跟大家分享在类unix操作系统下supervisor的使用以及一些关于进程的知识 一.问题背景 1.背景 如何才能让一个进程摆脱终端,获得相对较长的生命周期? 2.后台(守护).前台进程 ​什么是守护进程?通俗点讲就是后台跑着的进程,不会因为你关了终端服务就会随之停止,直到你把计算机的电源关闭.当进程变为后台进程后,同一个终端就会释放了,你可以在其中干别的事情,而不会干扰到你跑的服务.后台进程一般来说不能捕捉输入,服务的输出依然可以选择在终端输出. 同样的道理,理解前台进程就简单多了,前

  • 详解Supervisor安装与配置(Linux/Unix进程管理工具)

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统.它可以很方便的监听.启动.停止.重启一个或多个进程.用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制. 因为Supervisor是Python开发的,安装前先检查一下

  • node进程管理工具PM2用法详解

    PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 npm install -g pm2 常用命令 $ npm install pm2 -g # 命令行安装 pm2 $ pm2 start app.js -i 4 #后台运行pm2,启动4个app.js # 也可以把'max' 参数传递给 start # 正确的进程数目依赖于Cpu的核心数目 $ pm2 start app.js --name my-api #

  • Python学习之pip包管理工具的使用

    目录 写文的原因 pip 简介 pip 安装/移除包 升级包和查看已安装包 搜索包 写文的原因 学习 Python 的过程中,经常会使用 pip 命令去安装第三方模块,但细细琢磨下来,我真的掌握这款工具了吗? 本文为你全面揭示一下 pip 包管理工具的使用! pip 简介 pip 是 Python 默认集成的包管理工具,而其本质就是 Python 标准库中的一个包,只是比较特殊一些,可以管理其它包,从 Python2.7 开始,Python 安装包中默认装载了 pip,而且如果使用虚拟环境,即使

  • Linux运维工具Supervisor的安装使用(进程管理工具)

    一.介绍 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.目前Supervisor可以运行在大多数Unix系统上,但不支持在Windows系统上运行.Supervisor需要Python2.4及以上版本,但任何Python 3版本都不支持. 二.自带Web管理程序 Supervisor有四个组件: 1. supervisord 运行Supervisor的后台服务,它用来启动和管理那些你需要Sup

  • Linux进程管理工具supervisor安装配置教程

    环境:CentOS 7 官方文档:http://supervisord.org/ 安装 # yum install -y epel-release # yum install -y supervisor 启动 # supervisord -c /etc/supervisord.conf # ps -ef | grep supervisor root 19703 1 0 17:32 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/su

  • 详解python之简单主机批量管理工具

    今天做了一个很简单的小项目,感受到了paramiko模块的强大,也深感自己Linux的功力不行~~ 一.需求 二.简单需求分析及流程图 需求很少,我就简单地说下: 1. 主机分组可以配置文件实现(我用字典存数据的). 2. 登陆功能不做.选择分组后可查看组内对应主机的主机名和IP地址. 3. >>>cmd: df(输入命令则起多个线程(视组内有多少个主机而定)同时执行) 输出: -------------h1------------ --(命令返回的数据) -------------h2

随机推荐