【工具】supervisor进程管理

【工具】supervisor进程管理,第1张

 Supervisor是基于Python开发的进程管理程序,能将一个命令行进程转为后台daemon,可以替换nohup、&、screen等启动方案。还可以实现监控进程状态,当进程异常退出时能自动重启。它通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只须在supervisor的配置文件中,填写目标进程的执行命令配置即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

 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文件也就会一直被删除和创建。

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

参考链接


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11256284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存