Supervisor-守护进程工具

1. 进程管理工具(Supervisor) 简介

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

2. Supervisor安装与配置

2.1. 安装Supervisor

  1. 配置好yum源后,可以直接安装

  2. Debian/Ubuntu可通过apt安装

  3. pip安装

  4. easy_install安装

2.2. 配置Supervisor应用守护

  • supervisor配置文件/etc/supervisord.conf

注:supervisor的配置文件默认是不全的,不过在大部分默认的情况下,上面说的基本功能已经满足。

  • 子进程配置文件路径/etc/supervisord.d/

注:默认子进程配置文件为ini格式,可在supervisor主配置文件中修改。

2.3. 配置文件说明

2.3.1. /etc/supervisord.conf配置文件说明

2.3.2. 子进程配置文件说明

给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/目录下,以.ini作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisord.d/test.conf):

2.3.3. 子进程配置示例

这样,如果nginx挂掉,可以自动重新拉起运行;

2.4. 运行supervisor

  • 运行supervisord,查看是否生效

  • 如果服务已启动,修改配置文件可用"supervisorctl reload"命令来使其生效

3. supervisor控制命令

4. Supervisor作为服务启动

  • 如果采用rpm包等安装方式,直接回创建对应service服务;
  • 如果采用二进制编译等方式,可以自己手写服务文件,并作为服务运行;

4.1. 编写配置文件

  1. 新建一个"supervisord.service"文件

  2. 将文件拷贝至"/usr/lib/systemd/system/supervisord.service"

  3. 执行命令加载服务文件

4.2. 运维supervisord服务

使用supervisor进程管理命令之前先启动supervisord,否则程序报错。
使用命令supervisord -c /etc/supervisord.conf启动。
若是centos7:

5. 常见问题

  1. unix:///var/run/supervisor.sock no such file
    • 问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
    • 解决办法supervisord -c /etc/supervisord.conf
  2. command中指定的进程已经起来,但supervisor还不断重启
    • 问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,这里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d
    • 解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个
  3. 启动了多个supervisord服务,导致无法正常关闭服务
    • 问题描述:在运行supervisord -c /etc/supervisord.conf之前,直接运行过supervisord -c /etc/supervisord.d/xx.conf导致有些进程被多个superviord管理,无法正常关闭进程。
    • 解决办法:使用ps -fe | grep supervisord查看所有启动过的supervisord服务,kill相关的进程。
赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注