supervisor的使用

supervisor的使用

对于脚本文件的运行,常常使用nohup的方式后台运行,这样在ctrl + c 或者当前终端退出的时候可以保证脚本不会停止, 但是并不能监控这个脚本的运行状态,也不能在这个程序异常退出后能自动重启。

supervisor 是用python开发的一套client/server服务, 是类Unix服务器下的服务监控工具(不能运行在windows平台下), 能方便的管理程序进程的启停和保证程序挂掉后自动重启。它是通过fork/exec方式把这些被管理的进程当做supervisor的子进程来启动的, 这样只要在配置文件中定义好要被管理的子进程项目的信息就可以保证这些项目被管理。superviror 目前支持python3.4及以上版本和python2.7版本运行。

安装

centos的可以用: 

supervisor的使用

ubuntu可以用:

supervisor的使用

python pip安装:

supervisor的使用

python easy_install 安装:

supervisor的使用

使用

1. 配置supervisor的管理器的配置文件(通常命名为supervisord.conf)

2. 配置被管理子进程项目的配置文件(通常为.ini后缀文件)

3. supervisord 命令启动supervisor

4. supervisorctl 命令管理子进程项目。

2.1、配置文件

supervisor本身的配置文件通常命名为supervisord.conf。它同时由supervisord和supervisorctl使用。如果在没有-c选项(用于显式告诉应用程序配置文件名的选项)的情况下启动supervisor,则supervisor将在以下位置中按指定顺序查找名为supervisord.conf的文件。将使用找到的第一个文件。

supervisor的使用

所以可以在以上提到的路径中来配置配置文件, 也可以通过 supervisord  -c 的方式来指定运行的时候使用的配置文件的位置。

用 yum或者apt 安装的默认会在/etc/目录下生成supervisord.conf 文件,如下:

supervisor的使用

如果/etc 目录下没有此文件也可以自己生成, 生成命令如下:

supervisor的使用

我把一些比较常用的supervisord.conf配置项来然后加了中文注释, 方便进行按需配置

supervisor的使用

子进程配置文件的常用的配置项如下我也加了注释:

supervisor的使用

2.2、实战练习

下面编写一个python文件当做要运行的子进程, 文件路径为/home/yz/supervisor_study/hello.py,文件hello.py 内容如下:

supervisor的使用

这个Python文件会持续输出 hello world 到子进程配置的日志里边。

supervisor的使用

查看当前路径然后配置supervisord.conf:

因为是练习项目所以我把配置文件和日志文件都放在了/home/yz/supervisor_study/logs 这个文件夹。

进入/etc 目录下看是否有supervisord.conf配置文件, 若没有此文件通过如下命令生成:echo_supervisord_conf >> supervisord.conf

supervisor的使用

修改 /etc/supervisord.conf 配置文件 主要修改内容如下:

2.2.1 配置生成日志的路径

我想让supervisor本身的日志文件生成到项目路径logs文件夹下, 路径为: 

supervisor的使用

所以修改/etc/supervisord.conf配置如下:

supervisor的使用

2.2.2 指定要被管理的项目的配置文件路径

默认被管理子进程的配置文件目录为/etc/supervisord.d 不修改则会去这个目录下找配置文件。同样我想把被管理项目的配置文件放到我的项目目录下, 所以对/etc/supervisord.conf 做了如下修改

supervisor的使用

/etc/supervisord.conf文件配置完成。

看下被管理子进程项目的配置文件如何写:一个子进程配置文件可以放一个或多个被管理的项目, 如果项目多的话可以一个配置文件放置一个管理项目, 这样便于管理。因为指定了被管理项目的配置文件的位置为/home/yz/supervisor_study目录下的.ini文件, 所以去这个目录下编写配置文件(hello.ini)内容如下:

supervisor的使用

配置完成 supervisord 命令启动项目

supervisor的使用

logs文件夹下会有三个文件:

supervisor的使用

hello.* 文件是被管理的子项目的日志文件。

supervisor.log 是supervisor的日志文件,保存的是supervisr启动时候的日志如下内容

supervisor的使用

然后看下被管理的子进程被kill后是否能重启

supervisor的使用

可以看到启动后 python脚本运行pid为22917, 然后我kill -9的方式杀死后再次查看python脚本还是在运行只是pid变了,supervisor保证了python脚本异常退出后的重启。 

2.3、常用命令

supervisor的使用

通过如上命令可以管理supervisor的启停, 以及被管理项目的启停, 配置的更新。

更多信息可以去官方文档查看http://www.supervisord.org/ 


快来留言板交流吧

据说可以发图片(表情包安排上了嘛)

supervisor的使用


往期精彩回顾

2019年度精选文章

360技术中台招聘啦!!

为什么我们要从MySQL迁移到TiDB?


supervisor的使用

supervisor的使用

360技术公众号

技术干货|一手资讯|精彩活动

扫码关注我们