Supervisor的安装和入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Supervisor的安装和入门相关的知识,希望对你有一定的参考价值。

参考技术A 前几天准备部署一个go应用,由于目前go的daemon方案还不完善,只能借助其他工具进行部署,所以发现了一个非常好用的进程管理工具——Supervisor。

Supervisor (http://supervisord.org/) 是用Python实现的一款非常实用的进程管理工具。supervisor会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启,这样就可以保证程序执行中断后的情况下有自我修复的功能。

本文将介绍如何在CentOS上Supervisor的安装和使用。

可以先运行以下命令看系统是否安装了python,以及python的版本

[root@192 ~]# python -V

Supervisor需要的python版本是python2 2.4以上(暂未明确是否支持python3)

如果系统没有安装python2的话,可以使用系统自带安装工具安装python2

[root@192 ~]# yum install python2

再安装python包管理工具 easy_install

[root@192 ~]# yum install python-setuptools

使用easy_install安装supervisor

[root@192 ~]# easy_install supervisor

验证是否安装成功

[root@192 ~]# supervisord -v

注意:supervisor的命令是supervisord,命令比名称多一个d

supervisor主要是两个命令:

执行如下命令

[root@192 ~]# echo_supervisord_conf

我们可以看到一份标准的配置文件模板

下面简单说明(翻译)一下这份模板

这个配置文件包含了supervisor主进程配置和应用程序(我们希望被管理的程序)配置,一般推荐将主程序配置和应用程序配置分开配置。

配置文件里面默认将很多文件放置到/tmp/下,但是有时候系统会自动清理该目录的文件,导致supervisor无故挂掉或者控制不了,所以我们需要先创建几个目录来存放文件

首先,推荐创建 /etc/supervisord.d/ 来放置应用程序的配置

然后,推荐创建 /var/supervisord/ 来放置sock和pid文件

最后,推荐创建 /var/supervisord/log/ 来放置日志文件

下面的操作都是以这几个路径来配置

生成主进程配置文件

[root@192 ~]# echo_supervisord_conf > /etc/supervisord.conf

注意:主配置文件请以这个名称放在这个目录,如果放在其他地方请创建一个软连接,否则supervisorctl将无法管理应用程序

下面讲一些需要修改的地方,不需要修改的保持原样即可

首先,在 /etc/supervisord.d/ 创建一个 ini 文件

[root@192 ~]# vim /etc/supervisord.d/demo.ini

然后把 [program:theprogramname] 模块整个拷贝进去

同样,讲一些需要修改的地方

这样就配置完成了

[root@192 ~]# supervisord -c /etc/supervisord.conf

使用该命令启动supervisor

查看是否启动成功

[root@192 ~]# supervisorctl status

可以看到,我们刚才配置的 demo_cat 程序已经在运行了

主要是通过 supervisorctl 来管理应用程序

同时,根据上面的配置,supervisor会重定向应用程序的输出,并保存到 /var/supervisord/log 里面

新建开机启动服务

[root@192 ~]# vim /lib/systemd/system/supervisord.service

在supervisord.service中添加以下内容:

将服务脚本添加到systemctl自启动服务:

[root@192 ~]# systemctl enable supervisord.service

重启系统测试开机启动。

这个问题网上很多人说是防火墙问题,他们的解决办法都不适用。supervisor是本地服务,跟防火墙没有关系。后面我发现是因为 supervisorctl 默认在 /etc/ 里面有 supervisord.conf 。所以如果你的 /etc/ 里面没有 supervisord.conf ,建议你建个软连接,把主程序配置文件连接过来。例如:

[root@192 ~]# ln -s /etc/supervisord.conf /etc/supervisord.conf

这个问题是因为supervisor没有启动导致的。请确认superviosr是否已经启动。

这个问题是因为sock文件不见了。sock文件被删除一般是因为放在默认的 /tmp/ 里面被系统删除了。也有可能跟我一样,根据网上其他supervisor开机自启动的办法,将 supervisrod.conf 里面的 nodaemon=false 改成true,导致系统一直重启supervisor,sock文件也就会一直被删除和创建。

本人也是新手,欢迎大家一起讨论学习。后面有新的学习经验和体会会进一步更新。

参考链接

Supervisor的安装与使用入门

Supervisor是一个进程管理工具,官方的说法

用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor

这个工具主要就两个命令:

supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令

supervisorctl:启动supervisor的命令行窗口。

安装(Centos):

 

yum install python-setuptools -y
easy_install supervisor
#如果easy_install不好使就从官方下载:
#然后通过python安装:
tar zxf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install

 

成功安装后可以登陆python控制台输入import supervisor 查看是否能成功加载。

生成配置文件(supervisord.conf):

 echo_supervisord_conf > /etc/supervisord.conf

修改配置文件:

在supervisord.conf最后增加(分号后边的表示注释,可以不写):

[program:bandwidth]
command=python26 /usr/local/bin/bandwidth.sh  ;需要执行的命令wd)
user =root  ;(default  is  current  user , required  if  root)
autostart=true  ;start at supervisord start (default: true)
autorestart=true  ;whether/when to restart (default: unexpected)
startsecs=3  ;number of secs prog must stay running ( def . 1)
stderr_logfile=/tmp/bandwidth_err.log  ;redirect proc stderr to stdout (default false) 错误输出重定向
stdout_logfile=/tmp/bandwidth.log  ;stdout log path, NONE  for  none; default AUTO, log输出
#(更多配置说明请参考:http://supervisord.org/configuration.html)

 

运行命令:

 

#启动supervisor
supervisorctl //打开命令行
[root @iZ2365j7l5bZ  bin]# supervisorctl status   
bandwidth                        RUNNING   pid  2423 , uptime  0 : 06 : 35   
[root @iZ2365j7l5bZ  bin]# supervisorctl help   
  
default  commands (type help <topic>):   
=====================================   
add    clear  fg        open  quit    remove  restart   start   stop  update    
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version  
ctl中: help //查看命令
ctl中: status //查看状态

另外有一个坑需要注意:如果修改了 /etc/supervisord.conf ,需要执行 supervisorctl reload 来重新加载配置文件,否则不会生效。。

 

以上是关于Supervisor的安装和入门的主要内容,如果未能解决你的问题,请参考以下文章

supervisor安装

Centos7 中使用Supervisor守护进程

CentOS 7.4 配置 Supervisor 守护进程

Supervisor的安装和入门

使用Supervisor管理Celery进程。

supervisor管理进程 superlance对进程状态报警