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的安装和入门的主要内容,如果未能解决你的问题,请参考以下文章