supervisor还可以为 supervisord 或者每个子进程,设置一个非root的user,这个user就可以管理对应的进程。
1.easy_install 安装(使用默认python时,没有pip,可以用这个方法):
2.pip 安装:
3.Debian / Ubuntu可以直接通过apt安装:
4.Centos / Redhat安装需要安装epel源:
默认情况下会自动生成如下文件和目录:
默认配置文件: /etc/supervisord.conf
进程管理配置目录: /etc/supervisord.d/
没有生成上述信息的情况下,可自行创建。
可通过如下命令获取默认配置信息:
生成配置文件supervisord.conf:
以下是部分配置文件的信息:
默认为 /etc/supervisord.d 目录,可通过上述 include 中 files 参数定义,如:
可通过以下命令启动服务:
当supervisord启动的时候根据配置信息生成 sock 、 pid 、 log 文件,并加载自定义配置信息,执行 command 指定的命令,若 include 模块开启,会自动检索 files 设定的目录的 .ini 文件,根据用户自定义配置文件执行相关命令。
常用命令:
也可通过 supervisorctl 进入 supervisord 的命令行客户端工具:
进入 supervisorctl :
使用 help 可以罗列出所有命令:
如关闭、开启指定的子进程:
此外还有:
开启web界面,需要在 supervisor 的配置文件里添加 inet_http_server 模块, reload 后可通过 localhost:9001 访问,若开放其他机器访问需要将 port=127.0.0.1:9001 改为 port=*:9001 。
效果:
此外还可以基于 xml_rpc 进行调用,嵌入到自己的应用中使用
查看服务端可用函数:
详细的这里就不赘余了,想进行深度定制的项目可以 参考官档
前几天准备部署一个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文件也就会一直被删除和创建。
本人也是新手,欢迎大家一起讨论学习。后面有新的学习经验和体会会进一步更新。
参考链接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)