Supervisor使用教程

在项目中,经常有脚本需要常驻运行的需求。以PHP脚本为例,最简单的方式是:

这样能保证当前终端被关闭或者按CRTL+C后,脚本仍在后台运行。但是没法保证脚本异常后自动重启等。

Supervisor 是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

官网介绍:http://supervisord.org/

本文所用环境:

CentOS release 6.8 (Final)

Python 2.6.6

pip 7.1.0 from /usr/lib/python2.6/site-packages (python 2.6)

supervisor 3.3.4

安装

平台要求

引自官网(http://supervisord.org/introduction.html#platform-requirements):

Supervisor已经过测试,可以在Linux(Ubuntu 9.10),Mac OS X(10.4 / 10.5 / 10.6)和Solaris(10 for Intel)和FreeBSD 6.1上运行。它可能在大多数UNIX系统上都能正常工作。在任何版本的Windows下,Supervisor 都不会运行。Supervisor 可以使用 或更高版本,但不能在任何版本的 下使用。

我使用的环境:

安装

安装方法有:1、easy_install 安装(需安装有pip):

2、pip 安装(需安装有pip,推荐):

3、Debian / Ubuntu可以直接通过apt安装:

本文测试的时候是使用pip安装的。其它方式未做测试。

安装后配置文件生成:

1、通过easy_install或pip安装后,需要运行

生成配置文件。

2、使用 安装后,supervisor的主配置文件在:

supervisor的配置文件默认是不全的。子进程配置文件在:

启动supervisor

我们先修改 最后的 部分配置:

这样就可以支持子配置文件,而不用改动主配置文件。

启动方法一般有:

1、使用 或者 安装的 则:

即可运行。

supervisor 默认在以下路径查找配置文件:/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf, /etc/supervisor/supervisord.conf

如需指定主配置文件,则需要使用 参数:

查看安装的版本:

然后查看supervisor的状态:

注: 是主进程, 是给守护进程发送命令的客户端工具。

2、使用 安装的 直接可以通过

运行。

使用示例

我们以简单的 为例:

在 新增子进程配置文件 :

然后启动程序:

这两个命令分别代表重新读取配置、更新子进程组。执行update后输出:

这样刚才添加的 脚本就常驻运行起来了。可以通过日志查看运行情况:

也可以使用 查看子进程运行情况:

配置文件

主配置

主配置文件名: supervisord.conf

可以通过运行 获得。这个配置文件一般情况下不需要更改,除了最后的 部分,其余保持默认即可。

子进程配置文件

一般放在: 目录 。一个脚本对应一个配置文件。

配置说明:

简化模板

防盗版声明:本文系原创文章,发布于公众号 (fhyblog)及博客园,转载需作者同意。

命令行程序

supervisord

supervisord 是主进程。

通过 可以查看帮助说明。示例:

supervisorctl

supervisorctl 是客户端程序,用于向supervisord发起命令。

通过 可以查看帮助说明。我们主要关心的是其 命令:

这些命令对于控制子进程非常重要。示例:

supervisord 有进程组(process group)的概念:只有子进程在进程组,才能被运行。

也支持交互式命令行:

web界面操作

需要开启 注释掉的这4行:

端口默认是监听 ,这里方便测试,修改为:

然后重启主进程supervisord:

浏览器访问:http://myip:9001 ,输入用户名、密码后,即可看到web页面:

注意:如果修改配置文件时, 这一行被注释,会导致不仅web需要认证,命令行使用 也需要认证,这时候就需要在交互式命令行里输入用户名、密码才能进行下一步的操作。

其它问题

1、Centos6 docker环境没有pip

解决方案:需要先安装扩展源EPEL。

EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。

首先安装epel扩展源:

然后再安装pip

查看版本:

参考:https://www.cnblogs.com/saolv/p/6963314.html

2、Centos6环境安装 后,执行:

出现:

原因:pip安装的meld3不可用,手动安装。

感谢https://www.cnblogs.com/hubery/p/5653007.html 文章提供的方法!这个问题困扰了好久,github页面(https://github.com/Supervisor/meld3/issues/23)提供的解决方案都不可行,反而导致pip都不能用了。

3、因参考github里meld3解决方案导致pip不可用:

解决方案:删除 下面的包,重新安装python-setuptools:

参考:https://stackoverflow.com/questions/50742538/importerror-no-module-named-sysconfig-cant-get-pip-working

参考

1、Supervisor: A Process Control System — Supervisor 3.3.4 documentation

http://supervisord.org/index.html

2、进程管理supervisor的简单说明 - jyzhou - 博客园

https://www.cnblogs.com/zhoujinyi/p/6073705.html

3、DevOps

https://mp.weixin.qq.com/s/mqrkAEaGFKJy-4PQadJJ9w?

4、supervisor使用 - 回首郑板桥 - 博客园

https://www.cnblogs.com/hubery/p/5653007.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181222G1414400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券